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

时间:2015-01-04 19:23:44

标签: c# while-loop

所以分配如下:你可以输入各种数字但是当你连续两次输入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正确我不是吗?

有任何线索吗?我不允许在这个问题上使用数组。

提前致谢

3 个答案:

答案 0 :(得分:2)

是的,对,你有逻辑错误。它应该是这样的:

while ((givenNumber != 0) || (prevNumber != 0)) {

查找DeMorgan's laws以了解原因......

答案 1 :(得分:1)

您的问题在于您的条件声明。

现在你要检查givenNumber和PrevNumber是否都不等于0。

因此,如果它们都不等于0,则语句将评估为TRUE。但是,如果其中一个数字为0,则该语句将评估为FALSE,因为(TRUE)&& (FALSE)评估为FALSE。

有两种方法可以解决这个问题:您可以使用|| (" OR"运算符)与两个"!="陈述,或者你可以否定整个事情并使用正常的平等而不是"!="如此:!(givenNumber == 0&& prevNumber == 0)

答案 2 :(得分:0)

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

来自控制台的第一个读取值 - 编号7 给予努尔将是7 prevNumber也是7(因为赋值prevNumber = givenNumber;) 因此,虽然(7!= 0& 7!= 0)将通过

从控制台读取第二个 - 编号0 因此,(0!= 0& 7!= 0)将不会通过,因为0!= 0为FALSE,而如果条件为结果,则循环结束为FALSE