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

本文关键字:检查 有条件 循环 | 更新日期: 2023-09-27 18:36:04

所以赋值如下:你可以输入各种数字,但是当你连续两次输入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。我正在使用有条件的和正确的不是吗?

有什么线索吗?我不允许为此使用数组。

提前致谢

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

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

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

查看德摩根定律以了解原因...

你的问题出在条件语句上。

现在你正在检查给定的数字和上一个数字是否都不等于0。

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

有两种方法可以解决此问题:您可以使用 ||("OR"运算符)和两个"!="语句,或者你可以否定整个事情并使用正则相等而不是"!=",这样:!(给定数字 == 0 &&上一个数字 == 0)

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

对于从控制台首次读取的值 - 数字 7给定数字将为 7prevNumber 也将是 7(因为赋值 prevNumber = givenNumber;)因此,而 (7 != 0 &&7 != 0) 将通过

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