在 for 循环中尝试/捕获

时间:2020-12-21 08:37:02

标签: c# for-loop if-statement try-catch

我是编程新手,正在尝试解决问题。我有一个数组,我想用用户的输入填充,但我想确保它只是 1-25 之间的整数,没有字符串输入。我该怎么做?

到目前为止我得到的代码是这样的:

for (int i = 0; i < lottery.Length; i++)
{
    Console.Write(i + ": ");

    try
    {
        input = int.Parse(Console.ReadLine());
        lottery[i] = input;
    }
    catch
    {
        Console.WriteLine("Only integers!");
        i--;
    }
}

此代码确保数组的唯一输入是整数,但如何让用户只写 1-25 之间的数字?我尝试了不同的 if 语句和其他循环 3 小时,但无法解决。请帮忙。

2 个答案:

答案 0 :(得分:3)

您不应该使用异常来驱动您的代码。就性能而言,异常是代价高昂的事情,如果有办法避免它们,您应该始终使用这种方式。
在您的情况下,您应该使用 int32.TryParse 而不是 Parse。如果输入不是有效的整数,则此 TryParse 不会引发异常,但会返回 false 或 true,而解析的数字(如果是整数)在传递给该方法的 out 参数中返回。

这允许使用 while 循环编写更简单的代码以在出现错误时继续输入。

        for (int i = 0; i < lottery.Length; i++)
        {
            Console.Write(i + ": ");

            // Start the loop with an invalid input
            int input = 0;
            while(input == 0)
            {
                if(int32.TryParse(Console.ReadLine(), out input);
                {
                    // Got a valid integer, add out acceptance logic here
                    if(input > 0 && input <= 25)
                        lottery[i] = input;
                    else
                    {
                        Console.WriteLine("Type a number between 1 and 25");

                        // Not a valid range. Force the loop to continue
                        input = 0;
                    }
                }
                else
                    Console.WriteLine("Write only integers between 1-25");
            }
        }

答案 1 :(得分:-1)

int[] lottery = new int[5];
        for (int i = 0; i < lottery.Length; i++)
        {
            Console.WriteLine(i + ": ");
            int input; 
            while(true)
            {
                string inp = Console.ReadLine();
                if(Int32.TryParse(inp, out input) == true)
                {
                    if (0 < input & input <= 25)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Only numbers 1-25");
                    }
                }
                else
                {
                    Console.WriteLine("Only Integers");
                }
                    
            }
               
            lottery[i] = input;

            
        }