While循环没有正确检查所有条件?

4

这是任务要求:您可以输入各种数字,但当您连续输入两次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。当我调试它时,它会说我的给定数字是0,上一个数字是7,当它回到while条件时,它就停止并结束了。当程序完成时,调试清楚地显示prevNumber = 7和givenNumber = 0。我使用的条件AND是正确的,不是吗?
有什么线索吗?我不能使用数组来解决这个问题。
提前感谢您的帮助。

尝试像这样写:while ((givenNumber != 0) && (prevNumber != 0)) { - RBarryYoung
@RBarryYoung 尝试了但没有成功 - RandomPerson
3个回答

2
哦,对了,你的逻辑有误。应该是这样的:
while ((givenNumber != 0) || (prevNumber != 0)) {

查阅德摩根定理,了解原因...


1
你的问题出在条件语句上。现在你正在检查给定数字和上一个数字是否都不等于0。因此,如果它们都不等于0,则该语句将计算为TRUE。但是,如果其中一个数字是0,则该语句将计算为FALSE,因为(TRUE)&&(FALSE)计算为FALSE。
有两种方法可以解决这个问题:你可以使用||(“或”运算符)与两个“!=”语句,或者你可以否定整个语句并使用常规相等而不是“!=”,如下所示:!(givenNumber == 0 && prevNumber == 0)

0

while (givenNumber != 0 && prevNumber != 0)

首先从控制台读取值 - 数字7 给定的数字将是7 上一个数字也将是7(因为prevNumber = givenNumber;) 因此,while (7!= 0 && 7!= 0) 将通过

第二次从控制台读取 - 数字0 因此,while (0!= 0 && 7!= 0) 不会通过,因为0!= 0是FALSE,如果条件结果为FALSE,则while循环结束


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接