我正在做一个石头剪刀布游戏,希望在提示方法中添加验证,以便如果用户键入的任何单词不是“ rock”,“ paper”或“ scissor”,那么我们会再次提示。
我似乎无法理解下面的代码为什么不起作用,即使我键入“ rock”,它也会提示我再次输入。
for (i = 0; i < 5; i++) {
let valid = false;
let askPlayer = prompt("Rock, Paper or Scissor?");
while(!valid) {
if (askPlayer !== "rock" || askPlayer !== "paper" || askPlayer !== "scissor" || askPlayer !== "Rock" || askPlayer !== "Paper" || askPlayer !== "Scissor") {
askPlayer = prompt("Enter again. You seem to have entered an invalid value");
}
else { valid = true; }
}
play(askPlayer, computerPlay());
}
答案 0 :(得分:4)
我认为您可能会混淆肯定派和否定派。您的条件是说:“如果玩家提供的值与上述任何一项都不匹配,则再次询问”。
更人性化的条件是:
var valid_responses = ["rock","paper","scissors"];
if (valid_responses.includes(askPlayer.toLowerCase())){
valid = true;
} else {
askPlayer = prompt("Enter again. You seem to have entered an invalid value");
}
答案 1 :(得分:1)
我猜你不想要这种情况
askPlayer !== "rock" || askPlayer !== "paper" || askPlayer !== "scissor" || askPlayer !== "Rock" || askPlayer !== "Paper" || askPlayer !== "Scissor"
但是这个
askPlayer !== "rock" && askPlayer !== "paper" && askPlayer !== "scissor" && askPlayer !== "Rock" && askPlayer !== "Paper" && askPlayer !== "Scissor"
只需将所有||
更改为&&
答案 2 :(得分:0)
当前,您的代码在说:'如果输入不是“ rock”,或者输入不是“ scissor”,或者如果输入不是“ paper” ...等。
因此,如果您输入“ rock”,您将被拒绝,因为输入的内容不是“ scissor”而不是“ paper”。
您应该说“如果输入不是“ rock”,如果输入不是“ scissor”,并且如果输入不是“ paper” ...等”。
因此更改所有||到&&:)
您还可以在检查其有效性之前尝试执行askPlayer.toLowerCase(),因此您不必重复使用“ Rock”,“ Paper”,“ Scissor”。