C#异常处理,暂时停止循环

C#异常处理,暂时停止循环,c#,arrays,for-loop,exception,try-catch,C#,Arrays,For Loop,Exception,Try Catch,我是C#的新手,我真的需要你在一个项目上的帮助 这个想法是要求用户在1-20之间输入10个数字。用户输入的数字存储在一个数组中。在下一阶段,我生成了一个随机数,然后程序将用户先前输入的所有数字与随机数进行比较。如果其中一个数字与程序匹配,则编写类似“youwin!”的代码 我当前的解决方案还可以,但我想要比当前解决方案更好的异常处理。我的问题是: 正如您在下面的代码中所看到的,我依靠循环和try/catch来确保用户输入有效的数字,但是在测试了几次之后,我发现如果您输入了有效的输入,比如说第一次

我是C#的新手,我真的需要你在一个项目上的帮助

这个想法是要求用户在1-20之间输入10个数字。用户输入的数字存储在一个数组中。在下一阶段,我生成了一个随机数,然后程序将用户先前输入的所有数字与随机数进行比较。如果其中一个数字与程序匹配,则编写类似“youwin!”的代码

我当前的解决方案还可以,但我想要比当前解决方案更好的异常处理。我的问题是:

正如您在下面的代码中所看到的,我依靠循环和try/catch来确保用户输入有效的数字,但是在测试了几次之后,我发现如果您输入了有效的输入,比如说第一次输入,而不是第二次输入,那么未验证的输入仍然会发送到for循环和下一个索引。 我希望确保用户输入一个有效的数字,如果没有,for循环将暂时“暂停”,直到输入下一个有效数字

bool start = true; //Create a loop.
            {
                while (start == true)
                {
                    try
                    {
                        for (int x = 0; x < vektor.Length; x++) //To fill my array.
                        {
                            Console.WriteLine("Enter a number between 1 and 20:");
                            vektor[x] = int.Parse(Console.ReadLine());
                            start = false;
                        }
                        
                    }

                    catch
                    {
                        Console.WriteLine("Error, you need to enter a number!");
                    }
                }

                
            }
bool start=true//创建一个循环。
{
while(start==true)
{
尝试
{
用于(int x=0;x
创建一种方法,向用户提问,直到有效后才给出答案:

public int Ask(string question, int lower, int upper){


    while(true)
    {
      Console.WriteLine(question);
      string input = Console.ReadLine();
      bool valid = int.TryParse(input, out int inputInt); //valid is true if it was a number
      
      valid = valid && inputInt >= lower && inputInt <= upper; //but also test was it in range?

      if(valid)
        return inputInt;  //if not valid, repeat the question because the loop is infinite
    }

}
所以有效变成了错误。我们只能避开Ask()方法,如果
valid
为true,则返回有效数字,否则循环将再次循环

--

现在你可以有一个数字列表,假设你想要10,我们可以循环并向列表中添加数字,直到得到10:

List<int> numbers = new List<int>();

while(numbers.Count < 10)
{
  int validNumber = Ask("Enter a nubmer between 1 and 20: ", 1, 20);
  numbers.Add(validNumber);
}
列表编号=新列表();
while(number.Count<10)
{
int validNumber=Ask(“输入一个介于1和20之间的数值:”,1,20);
编号。添加(有效编号);
}
如果愿意,可以将其作为数组执行:

int[] numbers = new int[10];

for(int x = 0; x<numbers.length; x++)
{
  int validNumber = Ask("Enter a nubmer between 1 and 20: ", 1, 20);
  numbers[x] = validNumber;
}
int[]数字=新的int[10];

对于(int x=0;xUse
int.TryParse()
,您不需要异常处理-只需查看
TryParse()
是否返回true或false并相应地响应即可。谢谢!我也将查看该解决方案!谢谢!这对我帮助很大!
int[] numbers = new int[10];

for(int x = 0; x<numbers.length; x++)
{
  int validNumber = Ask("Enter a nubmer between 1 and 20: ", 1, 20);
  numbers[x] = validNumber;
}