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)