尽管条件错误但仍会跳出的do while循环问题

时间:2020-06-11 01:12:26

标签: c#

新手在这里!运行围绕Try / Catch块的do while循环时,我遇到了一些不一致的问题。

使用不同的输入来回反复进行处理会使循环不管其状态如何跳出,在多种情况下该循环应为真并再次运行该块。取而代之的是,它的出现次数是“随机数”。显然是某个地方的组织...我使用方式有误吗?

    static void Main(string[] args)
    {
        int[] numbers = new int[10];          
        int input = 0;                          
        int numRangeMin = 1;                    
        int numRangeMax = 25;
        bool duplicateNumber = false;
        bool loop = true;

        Console.WriteLine("\n Fill in a number:");

        for (int i = 0; i < numbers.Length; i++)
        {
            do
            {
                do
                {
                    try
                    {
                        Console.Write(" {0}: ", i + 1);
                        input = int.Parse(Console.ReadLine());
                        duplicateNumber = numbers.Contains(input); // Check if number already has been entered
                        loop = false;
                    }
                    catch (System.FormatException)
                    { Console.WriteLine(" Only integers between {0}-{1} Try again!\n", numRangeMin, numRangeMax); }

                    catch (System.OverflowException)
                    { Console.WriteLine(" Number is too big! Enter a number between {0}-{1}\n", numRangeMin, numRangeMax); }

                } while (loop == true);

                // Report if we attempt to insert a duplicate.
                if (duplicateNumber)
                { 
                    Console.WriteLine("Number already exists");
                }
                else if (input > numRangeMax)
                {
                    Console.WriteLine(" Too large:\n", numRangeMin, numRangeMax);
                    i--;
                }
            }
            while (duplicateNumber == true); // Keep asking while we don't get a unique number.

            numbers[i] = input; // Store the number
        }
    }

1 个答案:

答案 0 :(得分:1)

您的loop变量是在外部do循环之外定义的,因此只要您对其进行更改,它将保留其值,这将导致内部循环在第一次使用后不再执行被设置为假。

在执行内部循环之前在外部循环中定义loop或将其设置为true

 //...

 do
 {

     loop = true;

     do
     {
         try
         {

         //...

此外,duplicateNumber变量也会发生同样的情况,因为它是在for循环之外声明的。