为了账号安全,请及时绑定邮箱和手机立即绑定

如何将具有多个变量和多个条件的 if 语句放入 switch case 中?&& 可以比较案例吗?

如何将具有多个变量和多个条件的 if 语句放入 switch case 中?&& 可以比较案例吗?

qq_遁去的一_1 2021-10-17 15:47:06
我正在为学校制作一个石头剪刀布游戏,我有一个可以运行的游戏,但它有 213 行长。我试图通过添加 switch case 代替我的 if 语句来缩短它。是否在某些情况下 switch case 不起作用,它必须是一个 if 语句?String weaponChoice = keyboard.nextLine();switch (weaponChoice) {    case "Rock":        System.out.println("You Chose Rock");        break;    case "Paper":        System.out.println("You Chose Paper");        break;    case "Scissors":        System.out.println("You chose Scissors");        break;    default:        System.out.println(weaponChoice + " is not a valid answer the computer gets a point!");        compScore++;        break;}我在 if 语句中使用了上面的代码并将其切换没有问题,但下面的代码我不知道如何更改它。String getComputerChoiceVariable = getComputerChoice();System.out.println("The computer chose " + getComputerChoiceVariable);if (weaponChoice.equals(getComputerChoiceVariable)) {    System.out.println("It's a draw!");    ties++;} else if ((weaponChoice.equals("Rock")) && (getComputerChoiceVariable.equals("Scissors"))) {    System.out.println("You won!");    userScore++;} else if ((weaponChoice.equals("Paper")) && (getComputerChoiceVariable.equals("Rock"))) {    System.out.println("You won!");    userScore++;} else if ((weaponChoice.equals("Scissors")) && (getComputerChoiceVariable.equals("Paper"))) {    System.out.println("You won!");    userScore++;} else if (weaponChoice.equals("Rock") && getComputerChoiceVariable.equals("Paper")) {    System.out.println("You Lost!");    compScore++;} else if (weaponChoice.equals("Paper") && getComputerChoiceVariable.equals("Scissors")) {    System.out.println("You Lost!");    compScore++;} else if (weaponChoice.equals("Scissors") && getComputerChoiceVariable.equals("Rock")) {    System.out.println("You Lost!");    compScore++;}也许像switch (weaponChoice,getComputerChoiceVariable){    case "Rock",case "Scissors":        System.out.println("You won!");}但是 Java 不喜欢我收到大量错误。一个开关可以带两个参数吗?我是 Java 的新手。我可以以某种方式使用 && 来比较案例吗?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

不能用两个参数编写 switch 块。从 Oracle 的文档:


开关适用于 byte、short、char 和 int 原始数据类型。它还适用于枚举类型(在 Enum Types 中讨论)、String 类和一些包装某些原始类型的特殊类:Character、Byte、Short 和 Integer(在 Numbers 和 Strings 中讨论)。


但是,您可以通过编写以下代码使您的程序更加模块化:


if (weaponChoice.equals(getComputerChoiceVariable)) {

  System.out.println("It's a draw!");

  ties++;

} else if (userWins(weaponChoice, getComputerChoiceVariable)) {

  System.out.println("You won!");

  userScore++;

} else {

  System.out.println("You Lost!");

  compScore++;

}

并使用类似的东西:


public boolean userWins(String userWeapon, String compWeapon) {

  if((userWeapon.equals("Rock")) && (compWeapon.equals("Scissors"))) {

      return true;

  } else if((userWeapon.equals("Paper")) && (compWeapon.equals("Rock"))){

      return true;

  } else if((userWeapon.equals("Scissors")) && (compWeapon.equals("Paper"))){

      return true;

  } else if(userWeapon.equals("Rock") && compWeapon.equals("Paper")) {

      return false;

  } else if(userWeapon.equals("Paper") && compWeapon.equals("Scissors")) {

      return false;

  } else {

      return false;

  }

}


查看完整回答
反对 回复 2021-10-17
?
慕斯王

TA贡献1864条经验 获得超2个赞

您不一定需要切换代码来缩短它。您可以将树选项放在一个列表中,并将用户的选择与计算机选择后的值进行比较,以查看用户是否获胜。


如果您有列表[Rock, Paper, Scissors],则计算机选择了 Rock。找到它后面的元素,在这种情况下是 Paper。现在您只需要查看该值是否等于用户的选择,如果是这样,则用户赢了。


List<String> choices = Arrays.asList("Rock", "Paper", "Scissors");


if (playerChoice.equals(computerChoice)) {

    System.out.println("Draw!");

} else if (playerChoice.equals(choices.get((choices.indexOf(computerChoice) + 1) % 3))) {

    System.out.println("You won!");

} else {

    System.out.println("You lost!");

}

此处可choices.indexOf(computerChoice)找到列表中计算机选择的当前位置。它添加一个以查找列表中的下一个元素,并使用余数运算符 ( % 3) 来确保如果下一个索引高于列表中的最后一个元素,它会翻转回第一个元素。


查看完整回答
反对 回复 2021-10-17
  • 3 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信