亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將具有多個變量和多個條件的 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?,F在您只需要查看該值是否等于用戶的選擇,如果是這樣,則用戶贏了。


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 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號