【发布时间】: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 进行调试,但令人难以置信的是,玩家给出的提示选择似乎工作正常(见下面的屏幕截图)并且:
-
当输入为“rock”、“paper”或“scissors”时,两个console.log 布尔测试记录“true”。第一个 console.log 应该记录 false(意外),而第二个应该记录 true(预期)。
-
当输入为“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