【问题标题】:While loop not properly checking all conditions?虽然循环没有正确检查所有条件?
【发布时间】:2015-03-02 09:26:13
【问题描述】:

所以分配如下:你可以输入各种数字,但是当你连续输入两次 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)) {
  • @RBarryYoung 试了没有成功

标签: c# while-loop


【解决方案1】:

哦,对了,你的逻辑错了。应该是这样的:

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

查看DeMorgan's laws 了解原因...

【讨论】:

    【解决方案2】:

    您的问题在于您的条件语句。

    现在您正在检查 givenNumber 和 PrevNumber 是否都不等于 0。

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

    有两种方法可以解决此问题:您可以使用 || (“OR”运算符)与两个“!=”语句,或者您可以否定整个事情并使用常规相等而不是“!=”这样:!(givenNumber == 0 && prevNumber == 0)

    【讨论】:

      【解决方案3】:

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

      对于第一个从控制台读取的值 - 数字 7 givenNum 将为 7 prevNumber 也将是 7(因为分配 prevNumber = givenNumber;) 因此 while (7 != 0 && 7 != 0) 将通过

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

      【讨论】:

        猜你喜欢
        • 2014-01-25
        • 1970-01-01
        • 2020-06-08
        • 2011-01-19
        • 2023-03-28
        • 1970-01-01
        • 2015-05-08
        • 2016-05-18
        • 1970-01-01
        相关资源
        最近更新 更多