Как поймать исключение внутри цикла do while - PullRequest
0 голосов
/ 18 января 2019

Моя проблема в том, что после того, как первое исключение поймано, переменная number уже имеет значение, отличное от нуля, поэтому, когда выдается второе исключение. Это просто выпрыгивает из моей петли. Я хочу, чтобы можно было перехватить два исключения или более в зависимости от пользовательского ввода, не выпрыгивая из цикла.

Есть мысли? Я новичок в кодировании, поэтому надеюсь, что вы можете сделать это просто:)

int number = 0;
int svar = 2; // set by the user; for example 2

do
{
    try
    { 
       for (int i = 0; i < svar; i++)
       {
           Console.Write("\nWrite the number you would like to add to your list: ");
           nummer = int.Parse(Console.ReadLine());
       }

    }
    catch
    {
        Console.WriteLine("\n-- ERROR --");
        Console.WriteLine("You typed a letter instead of a number, try again!");
    }

    myList.Add(number);

} while (number == 0);

Ответы [ 4 ]

0 голосов
/ 18 января 2019

Давайте оставим простой код - давайте извлечем метод InputInteger; другое предложение - использовать TryParse вместо перехвата исключений :

   private static int InputInteger(string title) {
     Console.WriteLine(); 

     // Keep on asking user
     while (true) {
       if (!string.IsNullOrEmpty(title)) 
         Console.Write(title);

       // if correct integer value provided, return it
       if (int.TryParse(Console.ReadLine(), out var result)) 
         return result;

       // in case of syntax error print the message
       Console.WriteLine("-- ERROR --");
       Console.WriteLine("Please, type integer number, try again!");
     }
   }  

Затем вы можете использовать его, когда хотите, чтобы пользователь ввел целочисленное значение:

   int svar = InputInteger("How many items would you like to have in the list?");

   ...

   // get svar integer items 
   for (int i = 0; i < svar; ++i)
     myList.Add(InputInteger("Write the number you would like to add to your list: ")); 
0 голосов
/ 18 января 2019

Вам нужно использовать блок try внутри него вот так

  int number = 0;
int svar = set by the user for exempel 2

do
{

       for (int i = 0; i < svar; i++)
       {
 try
  {
       Console.Write("\nWrite the number you would like to add to your list: ");
       nummer = int.Parse(Console.ReadLine());
   }

   catch
   {
   Console.WriteLine("\n-- ERROR --");
   Console.WriteLine("You typed a letter instead of a number, try again!");
   }

   myList.Add(number);

   }

} while (number == 0);
0 голосов
/ 18 января 2019

Я ценю, что вы новичок в кодировании. Добро пожаловать, и я надеюсь, вам понравится.

Я немного переработал код, чтобы сделать его более простым и безошибочным:

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessNumbers();
        }

        private static void ProcessNumbers()
        {
            var myList = new List<int>();
            string sinput = String.Empty;
            var number = 0;
            do
            {
                try
                {
                    Console.Write("Write the number you would like to add to your list (type stop when you are done): ");
                    var input = Console.ReadLine();

                    if(input != "stop")
                    {
                        number = int.Parse(input);
                        myList.Add(number);
                    }
                    else
                    {
                        sinput = input;
                    }
                }
                catch
                {
                    Console.WriteLine("ERROR: You typed a letter instead of a number, try again!");
                }

            } while (sinput != "stop");

            var sum = myList.Sum();
            Console.WriteLine("The sum of all your numbers is: " + sum);
            Console.Write("Press any key to exist...");
            Console.ReadKey();
        }
    }
}

По сути, он будет постоянно просить пользователя продолжать вводить цифры до тех пор, пока пользователь не остановится. В конце он покажет сумму всех чисел в результате. Дайте мне знать, если у вас есть какие-либо вопросы по поводу кода.

0 голосов
/ 18 января 2019

Вы можете использовать int.TryParse, см. Пример ниже

 for (int i = 0; i < svar; i++)
 {
     Console.Write("\nWrite the number you would like to add to your list: ");
     while (!int.TryParse(Console.ReadLine(), out number))
     {
         Console.WriteLine("\n-- ERROR --");
         Console.WriteLine("You typed a letter instead of a number, try again!");
     }

     myList.Add(number);
 }
...