【问题标题】:Can't exit do while loop无法退出 do while 循环
【发布时间】:2021-01-31 14:44:52
【问题描述】:

我正在构建一个简单的 Rock, Paper, Scissors,我可以通过浏览器控制台播放它。使用 do/while 循环,我提示选择三个可接受的选项“rock”、“paper”或“scissors”之一。一旦玩家输入这 3 个可接受的选项之一,do/while 循环就会终止。问题是它没有。

function playerPlay(){
    let choice;
    do{
      choice = prompt("Rock, paper or scissors?").toLowerCase();
      console.log(choice);
      console.log(choice !== "rock" || choice !== "paper" || choice !== "scissors");
      console.log(choice === "rock" || choice === "paper" || choice === "scissors");
    } while (choice !== "rock" || choice !== "paper" || choice !== "scissors");
    return choice; 
  }

  playerPlay();

我一直在尝试使用 console.log 进行调试,但令人难以置信的是,玩家给出的提示选择似乎工作正常(见下面的屏幕截图)并且:

  1. 当输入为“rock”、“paper”或“scissors”时,两个console.log 布尔测试记录“true”。第一个 console.log 应该记录 false(意外),而第二个应该记录 true(预期)。

  2. 当输入为“notRockPaperScissors”时,第一个 console.log 布尔测试记录 true(预期),而第二个 console.log 布尔测试记录 false(预期)。

我当然错过了显而易见的事情,但作为一个初学者,我看不出是什么导致了这种情况发生,理解原因肯定会对我(以及可能的其他学习者)有所帮助。感谢您的帮助!

【问题讨论】:

  • 您无法提供满足退出条件的输入。如果choice"rock",那么它将不是"paper""scissors",所以OR 通过。你想要&& 而不是 - 你想要重复循环,而选择都没有。或者while( ["rock","paper","scissors"].indexOf(choice) < 0),如果你想“花哨”。
  • 使用较新的方法includes,例如!["rock","paper","scissors"].includes(choice),而不是 .indexOf(choice) < 0 更容易阅读

标签: javascript loops infinite-loop do-while


【解决方案1】:

您应该使用&& 运算符而不是|| 运算符。

即而不是这个

while (choice !== "rock" || choice !== "paper" || choice !== "scissors");

使用这个

while (choice !== "rock" && choice !== "paper" && choice !== "scissors");

这样做的原因是,如果choice 采用任何值[rockpaperscissors],我们希望程序退出。在|| 运算符中,如果任何一个条件计算为真,则循环将继续,而在&& 运算符中,如果任何条件计算为假,则循环将退出。因此,如果选择采用任何列出的值,则条件将评估为 false,然后整个条件将评估为 false。

【讨论】:

    【解决方案2】:
    while (choice !== "rock" || choice !== "paper" || choice !== "scissors")
    

    您的条件始终为真,因为该值不是岩石、不是纸或不是 sciccors,因为它不可能是所有这些。使用 && 而不是 || 进行检查。

    【讨论】:

      【解决方案3】:

      问题在于 while 条件,您的程序将在 while 循环上堆叠,直到他得到一个错误条件。

      while (choice !== "rock" || choice !== "paper" || choice !== "scissors")
      

      与 || (OR) 逻辑运算符,您将在无限循环中堆叠。 您需要做的是更改为 && (AND) 运算符,如下所示:

      while (choice !== "rock" && choice !== "paper" && choice !== "scissors")
      

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多