【问题标题】: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();

【问题讨论】:

    标签: c# loops random while-loop


    【解决方案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 有用,因为(这是我的拙见)是以正确的方式编写条件的更直接的方法。
          猜你喜欢
          • 2019-06-10
          • 2022-12-10
          • 2022-12-12
          • 2013-12-16
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-25
          相关资源
          最近更新 更多