所以我在codecademy上建了一个石头剪刀游戏,正在调整它。我调整的是,当用户写出不适当的选择时,代码就会停止。
一切正常,但当我写“摇滚,纸张或剪刀”时,它仍然说不恰当的选择。
var userChoice = prompt("Do you choose rock, paper or scissors?");
//tweaking starts here
if (userChoice!=="rock") {
console.log("inappropriate choice");
}
else if (userChoice!=="paper") {
console.log("inappropriate choice");
}
else if (userChoice!=="scissors") {
console.log("inappropriate choice");
};
// tweaking ends here
var computerChoice = Math.random();
if (computerChoice < 0.34) {
computerChoice = "rock";
} else if(computerChoice <= 0.67) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
console.log("Computer: " + computerChoice);
var compare = function(choice1,choice2) {
if (choice1===choice2) {
return "The result is a tie!";
}
else if (choice1 === "rock") {
if (choice2==="scissors") {
return "rock wins";
}
else {
return "paper wins";
}
}
else if (choice1 === "paper") {
if (choice2 === "rock") {
return "paper wins";
}
else {
return "scissors wins";
}
}
else if (choice1 === "scissors") {
if (choice2 === "rock") {
return "rock wins";
}
else {
return "scissors wins";
}
};
};
compare(userChoice,computerChoice);
<!-- end snippet -->
答案 0 :(得分:2)
这是一个经典的if else if
阶梯问题。
如Java教程here
中所述但是,一旦满足条件,就会执行适当的陈述[...]并且不评估剩余的条件。
在您的情况下,当您输入&#34; paper&#34;或者&#34;剪刀&#34;,它在第一个分支上突破为userChoice != "rock"
。如果您输入&#34; rock&#34;,它会在第二个分支上突破为userChoice != "paper"
。
最终它没有通过if-else-if
阶梯,并最终打印出不适当的选择信息。
为了验证输入,使得用户除了字符串之外不输入任何内容,&#34;摇滚&#34;,&#34;纸张&#34;或者&#34;剪刀&#34;,按如下方式更改您的调整代码:
//tweaking starts here
if (userChoice!=="rock" && userChoice!=="paper" && userChoice!=="scissors"){
console.log("inappropriate choice");
}
}; // tweaking ends here
永远记住:
梯子只有一个分支被执行...... !!!如果是多个 条件属实,首先遇到的分支应该是 执行。
答案 1 :(得分:0)
这是一个可以帮助您了解if语句逻辑错误的示例:
var userChoice = prompt("Do you choose rock, paper or scissors?");
if ((userChoice != "rock") && (userChoice != "paper") && (userChoice != "scissors")) {
console.log("inappropriate choice");
} else {
console.log("appropriate choice!");
}
这是一个JSFiddle:https://jsfiddle.net/j66to3x0/2/