2012-11-10 17 views
1

好吧,所以我編寫了一個簡單的搖滾紙剪刀遊戲,使用用戶輸入玩。用戶鍵入他們的選擇,一個隨機功能選擇電腦去,然後結果產生。在此之後,程序因爲完成而被終止。我想使用一個while循環,這樣當遊戲結束時,它會再次啓動,然後程序將停止,如果用戶輸入退出退出,這可以很容易地通過只是說一些像playerGo != exit ,玩遊戲等等等等。但是,我不能得到這個工作,有人可以幫我請,我是一個Java小白:)添加一個while循環讓用戶輸入搖滾紙剪刀遊戲重複,直到用戶結束遊戲

import java.util.Scanner; 

public class RockPaperScissors{ 
    public static void main(String[] args){ 

    Scanner input = new Scanner(System.in); 

    int compGoInt; 
    String compGo; 
    String playerGo; 

    System.out.println("You can type 'Exit' to quit the game at any time."); 
    System.out.print("Please enter your choice. Rock, Paper or Scissors: "); 
    playerGo = input.nextLine(); 

    compGoInt = (int) (Math.random() * 3); 

    switch (compGoInt){ 
    case 0: 
     compGo = "Rock"; 
     break; 
    case 1: 
     compGo = "Paper"; 
     break; 
    case 2: 
     compGo = "Scissors"; 
     break; 
    default: 
     compGo = "Error"; 
     System.out.println("Error."); 
     break; 
    } 

    if (playerGo.equals(compGo)){ 
     System.out.println("Computer chooses "+compGo); 
     System.out.println("It's a draw!"); 
    } 

    else if ((playerGo.equalsIgnoreCase("Rock") && compGo.equalsIgnoreCase("Scissors")) || 
      (playerGo.equalsIgnoreCase("Paper") && compGo.equalsIgnoreCase("Rock")) || 
      (playerGo.equalsIgnoreCase("Scissors") && compGo.equalsIgnoreCase("Paper"))){ 
     System.out.println("Computer chooses "+compGo); 
     System.out.println("Player Wins!"); 
    } 

    else if ((compGo.equalsIgnoreCase("Rock") && playerGo.equalsIgnoreCase("Scissors")) || 
      (compGo.equalsIgnoreCase("Paper") && playerGo.equalsIgnoreCase("Rock")) || 
      (compGo.equalsIgnoreCase("Scissors") && playerGo.equalsIgnoreCase("Paper"))){ 
     System.out.println("Computer chooses "+compGo); 
     System.out.println("Computer Wins!"); 
    } 

    else{ 
     System.out.println("Something has gone wrong!"); 
     System.out.println("Player chose "+playerGo); 
     System.out.println("Computer chose "+compGo); 
    } 


} 

}

+0

'休息...只是說像而playerGo = exit'請注意,它應該是'playerGo.equals! (「退出」)(或某物)。你能告訴我們你試過的代碼並解釋它爲什麼失敗嗎?你可能會得到更好的答案 - 因爲他們也會告訴你你哪裏出了問題。 – amit

+0

你有什麼嘗試?你把循環放在哪裏?你看到了什麼樣的錯誤或不正確的行爲? –

回答

0

簡單地說:

while(true) { 
    if(playerGo.equalsIgnoreCase("Exit")) break; 
    else //GameLogic 
} 

不過,如果我可以這樣說,你應該讓用戶選擇一個數字,因爲任何字母輸入都容易出錯。

特此說明:

import java.util.Scanner; 

public class RockPaperScissors{ 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     int compGoInt; 
     String compGo; 
     String playerGo; 

     while(true) { 
      System.out.println("You can type 'Exit' to quit the game at any time."); 
      System.out.print("Please enter your choice. Rock, Paper or Scissors: "); 
      playerGo = input.nextLine(); 

      if(playerGo.equalsIgnoreCase("Exit")) break; //Checks for exit condition. 
      else { //GameLogic 

       compGoInt = (int) (Math.random() * 3); 

       switch (compGoInt){ 
       case 0: 
        compGo = "Rock"; 
        break; 
       case 1: 
        compGo = "Paper"; 
        break; 
       case 2: 
        compGo = "Scissors"; 
        break; 
       default: 
        compGo = "Error"; 
        System.out.println("Error."); 
        break; 
       } 

       if (playerGo.equals(compGo)){ 
        System.out.println("Computer chooses "+compGo); 
        System.out.println("It's a draw!"); 
       } 

       else if ((playerGo.equalsIgnoreCase("Rock") && compGo.equalsIgnoreCase("Scissors")) || 
         (playerGo.equalsIgnoreCase("Paper") && compGo.equalsIgnoreCase("Rock")) || 
         (playerGo.equalsIgnoreCase("Scissors") && compGo.equalsIgnoreCase("Paper"))){ 
        System.out.println("Computer chooses "+compGo); 
        System.out.println("Player Wins!"); 
       } 

       else if ((compGo.equalsIgnoreCase("Rock") && playerGo.equalsIgnoreCase("Scissors")) || 
         (compGo.equalsIgnoreCase("Paper") && playerGo.equalsIgnoreCase("Rock")) || 
         (compGo.equalsIgnoreCase("Scissors") && playerGo.equalsIgnoreCase("Paper"))){ 
        System.out.println("Computer chooses "+compGo); 
        System.out.println("Computer Wins!"); 
       } 

       else{ 
        System.out.println("Something has gone wrong!"); 
        System.out.println("Player chose "+playerGo); 
        System.out.println("Computer chose "+compGo); 
       } 
      } 
     } 
    } 
} 
+0

這個while循環去哪裏?如果我把它放在整個事情之前,我遇到了playerGo變量沒有被聲明的問題,但是如果我把它放在它後面,只會給我從else語句中的錯誤消息。謝謝:) – Daniel

+0

@Daniel我複製了你的整個代碼,並把循環放在適當的位置。如果您不希望在任何時候打印指令,也可以將循環向下移動兩行,但input.nextLine()必須位於循環內部。 – ATaylor

+0

哦,我明白了,當我試圖自己添加一個while循環時,我沒有在休息時添加,並且我有!=布爾運算符而不是等於。這工作完美,我想要它,非常感謝:) – Daniel

0

您可以添加一個布爾變量IsGameRunning =真。 在檢查IsGameRunning狀態的while循環中包裝整個登錄。 向檢查用戶輸入「-1」的switch語句添加一個case,並且當用戶輸入「-1」作爲輸入時,case將IsGameRunning變量更改爲false。

簡單,應該工作

+0

我會試試看,謝謝:) – Daniel

0
boolean running = true; 
do{ 
    System.out.println("You can type 'Exit' to quit the game at any time."); 
    System.out.print("Please enter your choice. Rock, Paper or Scissors: "); 
    playerGo = input.nextLine(); 
    running = !(playerGo.equalsIgnoreCase('Exit') || playerGo.equalsIgnoreCase('Quit')); 
    if(running){ 
     //logic 
     compGoInt = (int) (Math.random() * 3); 
     ... 
    } 
}while(running) 

做一段時間 - >輸入需要詢問至少一次。

if (playerGo.equals(compGo)){ 
    System.out.println("Computer chooses "+compGo); 
    System.out.println("It's a draw!"); 
} 

playerGo.equals(compGo) - >playerGo.equalsIgnoreCase(compGo)喜歡你的代碼

+0

噢,謝謝:) – Daniel