While 循环与 || 一起使用但不是&&,不明白为啥?

Posted

技术标签:

【中文标题】While 循环与 || 一起使用但不是&&,不明白为啥?【英文标题】:While Loop Works with || but not &&, Not Understanding Why?While 循环与 || 一起使用但不是&&,不明白为什么? 【发布时间】:2021-05-20 10:45:38 【问题描述】:

程序的目标是掷两个骰子,直到它们都等于 6。当我在 while 语句中使用 && 时,它会在一个骰子等于 6 后停止。这是为什么呢?不应该 && 测试第一个条件然后如果它是正确的测试第二个?

while ((diceOne != 6) || (diceTwo != 6)) 
    diceOne = numberGeneration.Next(1, 7);
    diceTwo = numberGeneration.Next(1, 7);
    attempt = ++attempt;

    Console.WriteLine("Your first dice is: " + diceOne + " your second dice is: " + diceTwo);
    Console.WriteLine("Press any button to continue");
    Console.ReadKey();



Console.WriteLine("It took you " + attempt);
Console.WriteLine("Press any key to continue");
Console.ReadKey();

【问题讨论】:

【参考方案1】:

它停止是因为你打破了一个骰子不同于 6 的条件。

while ((diceOne != 6) && (diceTwo != 6))

While 将在两个条件都为真时执行。

【讨论】:

【参考方案2】:

我同意@Pedro,您也可以在while(true) 循环中使用break 语句并在两个骰子都等于6 时停止循环:

while (true) 
    diceOne = numberGeneration.Next(1, 7);
    diceTwo = numberGeneration.Next(1, 7);
    attempt = ++attempt;

    Console.WriteLine("Your first dice is: " + diceOne + " your second dice is: " + diceTwo);
    Console.WriteLine("Press any button to continue");
    Console.ReadKey();
    if (diceOne == 6 && diceTwo == 6) break;



Console.WriteLine("It took you " + attempt);
Console.WriteLine("Press any key to continue");
Console.ReadKey();

【讨论】:

【参考方案3】:

注意while循环条件是继续循环的必要和充分条件。 (diceOne != 6) && (diceTwo != 6)) 说“两个骰子都不是 6”。当两个骰子都不是6时,你当然要继续循环,所以这是充分条件,但这不是必要条件。您还想在什么时候继续循环?当一个骰子是 6 而一个骰子不是!

继续循环的充分必要条件是至少有一个骰子不是6,这就是||所表达的。

【讨论】:

【参考方案4】:

其他用户已经向您解释了为什么它不起作用。我可能会建议像这样修改 while 语句:

while (!(diceOne == 6 && diceTwo == 6))

【讨论】:

问题为什么,所以这不能回答问题。 你是对的,就像我在回答中所说的那样,其他用户已经回答了这个问题。无论如何,我的示例可能对 OP 有用,因为(这是我的拙见)是以正确的方式编写条件的更直接的方法。

以上是关于While 循环与 || 一起使用但不是&&,不明白为啥?的主要内容,如果未能解决你的问题,请参考以下文章

与javascript和php while循环一起使用

while循环如何与字符串拼接一起找出字符串的长度?

在Android中,想要TranslateAnimation与for循环一起用,但运行结果只有最后一次循环移动,不明求教

setTimeout 在 while 循环中

while循环&CPU占用率高问题深入分析与解决方案

Itertools循环方法 - 为什么“while”循环?