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

我正在为学校制作一个石头剪刀布游戏,我有一个可以运行的游戏,但它有 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 的新手。我可以以某种方式使用 && 来比较案例吗?


qq_遁去的一_1
浏览 162回答 3
3回答

Smart猫小萌

不能用两个参数编写 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;  }}

慕斯王

您不一定需要切换代码来缩短它。您可以将树选项放在一个列表中,并将用户的选择与计算机选择后的值进行比较,以查看用户是否获胜。如果您有列表[Rock, Paper, Scissors],则计算机选择了 Rock。找到它后面的元素,在这种情况下是 Paper。现在您只需要查看该值是否等于用户的选择,如果是这样,则用户赢了。List<String> choices = Arrays.asList("Rock", "Paper", "Scissors");if (playerChoice.equals(computerChoice)) {&nbsp; &nbsp; System.out.println("Draw!");} else if (playerChoice.equals(choices.get((choices.indexOf(computerChoice) + 1) % 3))) {&nbsp; &nbsp; System.out.println("You won!");} else {&nbsp; &nbsp; System.out.println("You lost!");}此处可choices.indexOf(computerChoice)找到列表中计算机选择的当前位置。它添加一个以查找列表中的下一个元素,并使用余数运算符 ( % 3) 来确保如果下一个索引高于列表中的最后一个元素,它会翻转回第一个元素。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java