我是 JS 的新手,我正在尝试做一个关于 codewars 的作业。它应该是一个石头剪刀布游戏,并返回哪个玩家赢了或者是否有平局。我尝试为此解决方案使用 switch case,但在某些情况下它会返回错误的答案。我知道可以使用 if 语句解决它,但我很好奇为什么我的解决方案不起作用。有人可以解释吗?提前谢谢你:)
这是我尝试过的:
let rps = (p1, p2) => {
switch (p1,p2){
case "scissors" && "paper":
return "Player 1 won!";
break;
case "scissors"&& "rock":
return "Player 2 won!";
break;
case "scissors"&& "scissors":
return "Draw!";
break;
case "paper"&& "paper":
return "Draw!";
break;
case "paper"&& "scissors":
return "Player 2 won!";
break;
case "paper"&& "rock":
return "Player 1 won!";
break;
case "rock"&& "rock":
return "Draw";
break;
case "rock"&& "paper":
return "Player 2 won!";
break;
case "rock" && "scissors":
return "Player 1 won!";
break;
}
};
switch 只支持一个值。要将它用作开关,您需要连接字符串。
switch (p1 + p2){
case "scissorspaper":
return "Player 1 won!";
case "scissorsrock":
return "Player 2 won!";
case "scissorsscissors":
return "Draw!";
另一个选项是嵌套开关
switch (p1){
case "scissors":
switch (p2){
case "paper":
return "Player 1 won!";
case "rock":
return "Player 2 won!";
case "scissors":
return "Draw!";
case "paper":
....
这不是 switch 的工作方式。 Switch 查找与给定语句完全匹配的值。
你想使用任何一个如果像这样:
const response = (p1, p2) => {
if (p1 === "scissors" && p2 === "paper") {
return "Player 1 won!";
}
// more ifs...
}
或者,如果你坚持使用开关,比较组合的
string
值,像这样:
const response = (p1, p2) => {
const combination = `${p1}:${p2}`;
switch (combination) {
case "scissors:paper":
return "Player 1 won!";
// ...more cases...
}
}
另外,注意返回后不需要break。 Return 语句会立即退出您的函数。