无法退出 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 进行调试,发现令人难以置信的是玩家给出的提示选择似乎工作正常(见下面的屏幕截图)并且:
当输入为“石头”、“布”或“剪刀”时,两个 console.log 布尔测试记录“真”。第一个 console.log 应该记录 false(意外),而第二个应该记录 true(预期)。
当输入为“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
取任何值 [rock
、paper
、scissors
] 时退出。在 ||
运算符中,如果任何条件的计算结果为真,则循环将继续,而在 &&
运算符中,如果任何条件的计算结果为假,则循环将退出。因此,如果 choice 采用任何列出的值,条件将评估为 false,然后整个条件将评估为 false。
问题出在while条件上,你的程序会在while循环上栈,直到他得到一个false条件。
while (choice !== "rock" || choice !== "paper" || choice !== "scissors")
随着|| (OR) 逻辑运算符,您将陷入无限循环。
您需要做的是更改为这样的 && (AND) 运算符:
while (choice !== "rock" && choice !== "paper" && choice !== "scissors")
我正在构建一个简单的石头剪刀布,我可以通过浏览器控制台玩它。使用 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 进行调试,发现令人难以置信的是玩家给出的提示选择似乎工作正常(见下面的屏幕截图)并且:
当输入为“石头”、“布”或“剪刀”时,两个 console.log 布尔测试记录“真”。第一个 console.log 应该记录 false(意外),而第二个应该记录 true(预期)。
当输入为“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
取任何值 [rock
、paper
、scissors
] 时退出。在 ||
运算符中,如果任何条件的计算结果为真,则循环将继续,而在 &&
运算符中,如果任何条件的计算结果为假,则循环将退出。因此,如果 choice 采用任何列出的值,条件将评估为 false,然后整个条件将评估为 false。
问题出在while条件上,你的程序会在while循环上栈,直到他得到一个false条件。
while (choice !== "rock" || choice !== "paper" || choice !== "scissors")
随着|| (OR) 逻辑运算符,您将陷入无限循环。 您需要做的是更改为这样的 && (AND) 运算符:
while (choice !== "rock" && choice !== "paper" && choice !== "scissors")