C#异常处理,暂时停止循环
Posted
技术标签:
【中文标题】C#异常处理,暂时停止循环【英文标题】:C# Exception handling, stop the loop temporarily 【发布时间】:2021-03-08 04:43:52 【问题描述】:我是 C# 新手,我真的需要你的帮助来完成一个项目。
这个想法是向用户询问 1-20 之间的 10 个数字。用户输入的数字存储在一个数组中。在下一阶段,我生成了一个随机数,然后程序将用户之前输入的所有数字与随机数进行比较。如果其中一个数字与程序匹配,则写下“你赢了!”之类的内容。
我当前的解决方案还可以,但我想要一个比当前解决方案更好的异常处理。这是我的问题:
正如您在下面的代码中看到的那样,我依靠循环和 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!");
【问题讨论】:
使用int.TryParse()
,你不需要异常处理——只要看看TryParse()
是返回true还是false并做出相应的响应。
谢谢!我也会看看那个解决方案!
【参考方案1】:
创建一个向用户提出问题并且在其有效之前不给出答案的方法:
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
如果用户输入一个数字,valid
将为真,但如果他们输入 40 表示 1 到 20 的范围,那么第二个有效性评估是:
valid = true /*it was a number*/ && true /*40 is >= 1*/ && false /*40 is not <= 20*/
所以有效变成了假。我们只能转义 Ask() 方法,如果valid
为真则返回有效数字,否则循环再次循环
--
现在你可以有一个数字列表,比如你想要 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);
如果你愿意,你可以把它作为一个数组来做:
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;
因为你知道 Ask 方法永远不会返回,除非输入有效,所以循环“暂停”
【讨论】:
以上是关于C#异常处理,暂时停止循环的主要内容,如果未能解决你的问题,请参考以下文章