Java 脚本 - 为什么这个 switch case 语句不起作用?

问题描述 投票:0回答:2

我是 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;
}
};
javascript switch-statement
2个回答
0
投票

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":
    ....

0
投票

这不是 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 语句会立即退出您的函数。

© www.soinside.com 2019 - 2024. All rights reserved.