新手在这里!运行围绕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
}
}
答案 0 :(得分:1)
您的loop
变量是在外部do
循环之外定义的,因此只要您对其进行更改,它将保留其值,这将导致内部循环在第一次使用后不再执行被设置为假。
在执行内部循环之前在外部循环中定义loop
或将其设置为true
。
//...
do
{
loop = true;
do
{
try
{
//...
此外,duplicateNumber
变量也会发生同样的情况,因为它是在for
循环之外声明的。