Else 语句和 while 循环
Else statement and while loop
代码跳过错误 if 语句并直接进入 else if
我需要经过几圈,如果小于 2 圈,那么它将进入错误并再次返回要求输入新值。反之亦然,大于 20。我是一名新程序员,发现 C# Windows 表单难以理解
int.TryParse(txtNumberOfLaps.Text, out laps);
while (laps < 2 && laps > 20)
{
if (laps < 2)
{
MessageBox.Show("Laps can't be less than 2", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (laps > 20)
{
MessageBox.Show("Laps can't be more than 20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (laps > 2 && laps < 20)
{
break;
}
}
据我所知,我认为您的代码没有进入 while 循环。你问的是 laps < 2 AND laps > 20
,而我认为你想要的是 laps < 2 OR laps > 20
。你的循环没有意义,因为你的数字不能同时大于 20 和小于 2
它跳到哪个else if
?你的循环包含两个。我想程序甚至在开始循环之前就已经退出了,因为循环的哨兵值是无法满足的。对于任何给定的整数 n
,20>n<2
都不存在。这简直是不可能的。您可以通过检查哪些数字会使 while
循环的每个条件为真来看到这一点。例如
n < 2
can most easily be satisfied by supplying a 1
.
n = 1
makes n > 20
false, however.
on the other side, n > 20
is most easily made true by supplying 21
as an argument.
n = 21
makes your first condition of n<2
false and thus your loop never begins
因此,在 n
的任何情况下,您的 while
循环甚至都不会收到初始 True
值来开始。
既然已经解决了,让我们为您提供解决方案! :)
您正在寻找的是这样的:
int.TryParse(txtNumberOfLaps.Text, out laps);
while(true)
{
if (laps < 2 || laps > 20)
{
MessageBox.Show("Laps must be in range 2-20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
else
{
// do other things
break;
}
}
永远不会进入 while 循环,因为数字不能同时小于 2 和大于 20。laps < 2 && laps > 20
可能应该是 laps < 2 || laps > 20
更正,如果数字小于2或大于20,则进入while循环,但最后的else-if语句永远不会为真。如果数字在 2 到 20 之间,则永远不会进入 while 循环,因此无论如何都会命中 none 个 if 语句。
这是一个关于如何解决您描述的问题的示例:
while (true)
{
Console.WriteLine("Please enter a number between 2 and 20:");
var input = Console.ReadLine();
if (!int.TryParse(input, out var number))
{
// the input could not be parsed
Console.WriteLine("Please enter a proper numeric value.");
}
else if (number < 2)
{
Console.WriteLine("The number can't be less than 2.");
}
else if (number > 20)
{
Console.WriteLine("The number can't be more than 20.");
}
else
{
// if all if-statements above are false, the number must be between 2 and 20
Console.WriteLine($"You entered {number}. Good job!");
break;
}
}
您发布的代码看起来像是您第一次学习编程时要解决的早期问题之一。它有点像 trick-question,其中有多个缺陷等待您发现。
问题在这里:
while (laps < 2 && laps > 20)
它不能同时低于 2 和高于 20,所以循环永远不会执行。使用 ||
而不是 &&
,它将起作用。
同样一旦进入循环,最后的else if
语句是多余的,可以去掉。如果该条件为真,它无论如何都会跳出循环。
此代码有效:
int.TryParse(txtNumberOfLaps.Text, out laps);
while (laps < 2 || laps > 20)
{
if (laps < 2)
{
MessageBox.Show("Laps can't be less than 2", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Laps can't be more than 20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
代码跳过错误 if 语句并直接进入 else if
我需要经过几圈,如果小于 2 圈,那么它将进入错误并再次返回要求输入新值。反之亦然,大于 20。我是一名新程序员,发现 C# Windows 表单难以理解
int.TryParse(txtNumberOfLaps.Text, out laps);
while (laps < 2 && laps > 20)
{
if (laps < 2)
{
MessageBox.Show("Laps can't be less than 2", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (laps > 20)
{
MessageBox.Show("Laps can't be more than 20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (laps > 2 && laps < 20)
{
break;
}
}
据我所知,我认为您的代码没有进入 while 循环。你问的是 laps < 2 AND laps > 20
,而我认为你想要的是 laps < 2 OR laps > 20
。你的循环没有意义,因为你的数字不能同时大于 20 和小于 2
它跳到哪个else if
?你的循环包含两个。我想程序甚至在开始循环之前就已经退出了,因为循环的哨兵值是无法满足的。对于任何给定的整数 n
,20>n<2
都不存在。这简直是不可能的。您可以通过检查哪些数字会使 while
循环的每个条件为真来看到这一点。例如
n < 2
can most easily be satisfied by supplying a1
.
n = 1
makesn > 20
false, however.
on the other side,
n > 20
is most easily made true by supplying21
as an argument.
n = 21
makes your first condition ofn<2
false and thus your loop never begins
因此,在 n
的任何情况下,您的 while
循环甚至都不会收到初始 True
值来开始。
既然已经解决了,让我们为您提供解决方案! :)
您正在寻找的是这样的:
int.TryParse(txtNumberOfLaps.Text, out laps);
while(true)
{
if (laps < 2 || laps > 20)
{
MessageBox.Show("Laps must be in range 2-20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
else
{
// do other things
break;
}
}
永远不会进入 while 循环,因为数字不能同时小于 2 和大于 20。laps < 2 && laps > 20
可能应该是 laps < 2 || laps > 20
更正,如果数字小于2或大于20,则进入while循环,但最后的else-if语句永远不会为真。如果数字在 2 到 20 之间,则永远不会进入 while 循环,因此无论如何都会命中 none 个 if 语句。
这是一个关于如何解决您描述的问题的示例:
while (true)
{
Console.WriteLine("Please enter a number between 2 and 20:");
var input = Console.ReadLine();
if (!int.TryParse(input, out var number))
{
// the input could not be parsed
Console.WriteLine("Please enter a proper numeric value.");
}
else if (number < 2)
{
Console.WriteLine("The number can't be less than 2.");
}
else if (number > 20)
{
Console.WriteLine("The number can't be more than 20.");
}
else
{
// if all if-statements above are false, the number must be between 2 and 20
Console.WriteLine($"You entered {number}. Good job!");
break;
}
}
您发布的代码看起来像是您第一次学习编程时要解决的早期问题之一。它有点像 trick-question,其中有多个缺陷等待您发现。
问题在这里:
while (laps < 2 && laps > 20)
它不能同时低于 2 和高于 20,所以循环永远不会执行。使用 ||
而不是 &&
,它将起作用。
同样一旦进入循环,最后的else if
语句是多余的,可以去掉。如果该条件为真,它无论如何都会跳出循环。
此代码有效:
int.TryParse(txtNumberOfLaps.Text, out laps);
while (laps < 2 || laps > 20)
{
if (laps < 2)
{
MessageBox.Show("Laps can't be less than 2", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Laps can't be more than 20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}