无法退出 do while 循环

Can't exit do while loop

我正在构建一个简单的石头剪刀布,我可以通过浏览器控制台玩它。使用 do/while 循环,我提示 select 三个可接受的选项“石头”、“布”或“剪刀”之一。一旦玩家输入这 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. 当输入为“石头”、“布”或“剪刀”时,两个 console.log 布尔测试记录“真”。第一个 console.log 应该记录 false(意外),而第二个应该记录 true(预期)。

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

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

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

您的条件始终为真,因为该值不是 rock 或 not paper 或 sciccors,因为它不可能是所有这些。使用 && 而不是 || 检查。

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

即而不是这个

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

使用这个

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

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

问题出在while条件上,你的程序会在while循环上栈,直到他得到一个false条件。

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

随着|| (OR) 逻辑运算符,您将陷入无限循环。 您需要做的是更改为这样的 && (AND) 运算符:

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