作为代码学院课程后的第一个项目我正在制作摇滚/纸/剪刀游戏,但我无法看到我的循环在哪里出错。
while (userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK") {
var userChoice = prompt("Invalid choice. Please pick ROCK, PAPER, SCISSORS, LIZARD or SPOCK.");
var userChoice = userChoice.toUpperCase();
}
道歉,如果它是平凡的。
答案 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))