我不明白我的If陈述如何被视为正确

时间:2019-09-25 22:20:16

标签: javascript while-loop

我正在做一个石头剪刀布游戏,希望在提示方法中添加验证,以便如果用户键入的任何单词不是“ 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());
    }

3 个答案:

答案 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”。