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 循环与 || 一起使用但不是&&,不明白为啥?的主要内容,如果未能解决你的问题,请参考以下文章
在Android中,想要TranslateAnimation与for循环一起用,但运行结果只有最后一次循环移动,不明求教