我是编程新手,正在尝试解决问题。我有一个数组,我想用用户的输入填充,但我想确保它只是 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 小时,但无法解决。请帮忙。
答案 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;
}