2017-02-24 52 views
-2

我正在嘗試爲我的Java類編寫一個RockPaperScissors遊戲,但我遇到了代碼問題。當它運行時,有時它輸出錯誤的東西,有時它是正確的。如何解決用Java編寫的我的RockPaperScissors遊戲?

例如,當用戶輸入P時,計算機要麼用Tie,My Point或Your Point來回答,然後在下面會說出我們每個人都玩的東西。但通常它會說「你的觀點!」 「R擊敗R」。

import java.util.Scanner; 
public class RockPaperScissors 
{  
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 

    int tie = 0; 
    int win = 0; 
    int loss = 0; 

    String playerChoice; 
    System.out.println(RockPaperScissors.getComputerChoice()); 

    while (true) 
    { 
     System.out.println(); 
     System.out.print("(R)ock, (P)aper, (S)cissors, or quit: "); 

     playerChoice = input.nextLine(); 


     if (playerChoice.equalsIgnoreCase("quit")) break; 
     else    
       //switch statement 

      if (playerChoice.equalsIgnoreCase(
       RockPaperScissors.getComputerChoice())) 
      { 
       System.out.println("Tie!"); 
       tie++; 
      } 

      else if ((playerChoice.equalsIgnoreCase("R") && 
         RockPaperScissors.getComputerChoice().equals("S")) || 
        (playerChoice.equalsIgnoreCase("P") && 
         RockPaperScissors.getComputerChoice().equals("R")) || 
        (playerChoice.equalsIgnoreCase("S") && 
         RockPaperScissors.getComputerChoice().equals("P"))) 
      { 
       System.out.println("Your Point!"); 
       System.out.println(playerChoice + " beats " 
        + RockPaperScissors.getComputerChoice()); 
       win++; 

      } 

      else if ((playerChoice.equalsIgnoreCase("R") && 
         RockPaperScissors.getComputerChoice().equals("P")) || 
        (playerChoice.equalsIgnoreCase("P") && 
         RockPaperScissors.getComputerChoice().equals("S")) || 
        (playerChoice.equalsIgnoreCase("S") && 
         RockPaperScissors.getComputerChoice().equals(""))) 
      { 
       System.out.println("My Point!"); 
       System.out.println(RockPaperScissors.getComputerChoice() 
        + " beats " + playerChoice); 
       loss++; 

      } 

      else 
      { 
       System.out.println("Invalid Input!"); 

      } 
    } 
    System.out.println(); 
    System.out.println("You won " + win + " times."); 
    System.out.println("You lost " + loss + " times."); 
    System.out.println("We tied " + tie + " times."); 
} 


public static String getComputerChoice() 
{ 

    int compChoiceInt; 
    String compChoice; 
    compChoiceInt = (int) (Math.random() * 3); 
    switch (compChoiceInt) 
    { 
     case 0: 
      compChoice = "R"; 
      break; 
     case 1: 
      compChoice = "P"; 
      break; 
     case 2: 
      compChoice = "S"; 
      break; 
     default: 
      compChoice = "Invalid Input"; 
      System.out.println("Invalid Input."); 
      break; 
    } 

    return compChoice; 

} 
+3

你爲什麼一遍又一遍地調用'getComputerChoice'?聲明一個變量,將一次調用的結果賦值給它,然後在你的開關中使用它(你似乎決定改爲一系列'if..else'語句)。函數調用應該位於獲取玩家輸入的循環中的同一點。 –

回答

2

您在代碼中多次調用getComputerChoice()來決定用戶是贏,輸或關係。這可能導致幾個不同的可能的結果到每一輪,因爲這些方法調用的每一個都會導致隨機生成一個新的選擇。而不是多次調用該方法,在將它與玩家的選擇進行比較之前,聲明一個變量並調用它一次。