无法摆脱我的while循环(Javascript)

时间:2014-07-14 23:21:07

标签: javascript while-loop

作为代码学院课程后的第一个项目我正在制作摇滚/纸/剪刀游戏,但我无法看到我的循环在哪里出错。

while (userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK") {
    var userChoice = prompt("Invalid choice. Please pick ROCK, PAPER, SCISSORS, LIZARD or SPOCK.");
    var userChoice = userChoice.toUpperCase();
}

道歉,如果它是平凡的。

2 个答案:

答案 0 :(得分:6)

userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK"

应该是

userChoice !== "ROCK" && userChoice !== "PAPER" && userChoice !== "SCISSORS" && userChoice !== "LIZARD" && userChoice !== "SPOCK"

现在它基本上检查userChoice !== 0是否整个右侧是一个表达式并且计算结果为0.

在javascript中,|本身就是一个按位或。由于按位运算仅对整数有意义,因此您的字符串会转换为整数,因此您基本上执行0 | 0,将为0。

您可能正在考虑||,这是合乎逻辑的,或者我可以看到您将如何思考"如果userChoice不是Rock或Paper或Scissors",但是再次,不是如何有用。你必须检查userChoice是不是Rock,而userChoice不是Scissors。

如果你想查看userChoice是否为Rock,或者如果userChoics是剪刀等,你会使用||

根据评论,您可以通过执行以下操作来显着提高代码可读性:

var choices = ["ROCK", "PAPER", "SCISSORS", "LIZARD", "SPOCK"];    
while(choices.indexOf(userChoice) == -1) {
     userChoice = prompt("Invalid choice. Please pick one of: " + 
                         choices.join(" ").toUpperCase());
}

另外,只需添加个人喜爱的javascript技巧,即可更改

while(choices.indexOf(userChoice) == -1)

while(!~choices.indexOf(userChoice))

答案 1 :(得分:0)

或者如果你想使用不在的东西,你可以创建一个像这样的对象:

var choice = {ROCK:{}, PAPER:{}, SCISSORS:{}, LIZARD:{}, SPOCK:{}};

然后将while语句修改为:

while (!(userChoice in choice))