while 循环没有正确检查所有条件?
While loop not properly checking all conditions?
所以作业如下:你可以输入各种数字,但是当你连续输入两次0时,它需要停止。第一次输入数字时不允许输入 0。
这是我设置的代码:
class MainClass
{
public static void Main (string[] args)
{
int givenNumber, prevNumber;
Console.WriteLine ("Enter a number: ");
int.TryParse (Console.ReadLine (), out givenNumber);
// I've set the prevNumber to givenNumber because the variable has to be initialized
// before I can use it in the condition below. I thought setting it to the giveNumber
// wouldn't harm. Note that the first time your not allowed to enter 0
prevNumber = givenNumber;
while (givenNumber != 0 && prevNumber != 0) {
prevNumber = givenNumber; //Here is where they both are 0 at a given moment, but only after the condition.
Console.WriteLine ("Enter a number: ");
int.TryParse (Console.ReadLine (), out givenNumber);
}
Console.WriteLine ("Tada");
}
}
问题是当你只输入一个 0 时它已经停止了。例如,如果我首先输入 7,我的下一个数字将是 0。当我调试它时它说我的 givenNumber 是 0,prevNumber 是 7,当它回到 while 条件时它停止并完成。当程序完成调试时,清楚地表明 prevNumber = 7 和 givenNumber = 0。我使用的是条件 AND 正确吗?
有线索吗?我不允许在这件事上使用数组。
提前致谢
while (givenNumber != 0 && prevNumber != 0)
对于从控制台读取的第一个值 - 数字 7
givenNumer 将为 7
prevNumber 也将是 7(因为赋值 prevNumber = givenNumber;)
因此 while (7 != 0 && 7 != 0) 将通过
第二次从控制台读取 - 编号 0
因此 while (0 != 0 && 7 != 0) 不会通过,因为 0 != 0 是 FALSE 并且如果条件是结果是 FALSE
while 循环结束
哦,对了,你搞错逻辑了。应该是这样的:
while ((givenNumber != 0) || (prevNumber != 0)) {
查找 DeMorgan's laws 了解原因...
你的问题出在你的条件语句上。
现在您正在检查 givenNumber 和 PrevNumber 是否都不等于 0。
因此,如果它们都不等于 0,则该语句的计算结果为 TRUE。但是,如果其中一个数字为 0,则该语句的计算结果为 FALSE,因为 (TRUE) && (FALSE) 的计算结果为 FALSE。
有两种方法可以解决这个问题:您可以使用 || ("OR" 运算符)与两个“!=”语句,或者您可以否定整个事情并使用常规相等性而不是“!=”: !(givenNumber == 0 && prevNumber == 0)
所以作业如下:你可以输入各种数字,但是当你连续输入两次0时,它需要停止。第一次输入数字时不允许输入 0。
这是我设置的代码:
class MainClass
{
public static void Main (string[] args)
{
int givenNumber, prevNumber;
Console.WriteLine ("Enter a number: ");
int.TryParse (Console.ReadLine (), out givenNumber);
// I've set the prevNumber to givenNumber because the variable has to be initialized
// before I can use it in the condition below. I thought setting it to the giveNumber
// wouldn't harm. Note that the first time your not allowed to enter 0
prevNumber = givenNumber;
while (givenNumber != 0 && prevNumber != 0) {
prevNumber = givenNumber; //Here is where they both are 0 at a given moment, but only after the condition.
Console.WriteLine ("Enter a number: ");
int.TryParse (Console.ReadLine (), out givenNumber);
}
Console.WriteLine ("Tada");
}
}
问题是当你只输入一个 0 时它已经停止了。例如,如果我首先输入 7,我的下一个数字将是 0。当我调试它时它说我的 givenNumber 是 0,prevNumber 是 7,当它回到 while 条件时它停止并完成。当程序完成调试时,清楚地表明 prevNumber = 7 和 givenNumber = 0。我使用的是条件 AND 正确吗?
有线索吗?我不允许在这件事上使用数组。
提前致谢
while (givenNumber != 0 && prevNumber != 0)
对于从控制台读取的第一个值 - 数字 7 givenNumer 将为 7 prevNumber 也将是 7(因为赋值 prevNumber = givenNumber;) 因此 while (7 != 0 && 7 != 0) 将通过
第二次从控制台读取 - 编号 0 因此 while (0 != 0 && 7 != 0) 不会通过,因为 0 != 0 是 FALSE 并且如果条件是结果是 FALSE
while 循环结束哦,对了,你搞错逻辑了。应该是这样的:
while ((givenNumber != 0) || (prevNumber != 0)) {
查找 DeMorgan's laws 了解原因...
你的问题出在你的条件语句上。
现在您正在检查 givenNumber 和 PrevNumber 是否都不等于 0。
因此,如果它们都不等于 0,则该语句的计算结果为 TRUE。但是,如果其中一个数字为 0,则该语句的计算结果为 FALSE,因为 (TRUE) && (FALSE) 的计算结果为 FALSE。
有两种方法可以解决这个问题:您可以使用 || ("OR" 运算符)与两个“!=”语句,或者您可以否定整个事情并使用常规相等性而不是“!=”: !(givenNumber == 0 && prevNumber == 0)