2017-02-19 12 views
0

以下はBlueJのロック、ペーパー、ハサミのゲームのコードです。コンパイルしてユーザーが入力すると、コンピューターはすぐにplayerWins()からの多数の出力を出力します。ユーザーが「quit」と入力するとゲームが終了します。誰かが私の画面があふれないように助けてくれますか? (もし私のコードを凝縮する方法があればそれも素晴らしいでしょう)。ロック、ペーパー、ハサミ - BlueJクレイジーループ

import java.util.Random; 
import java.util.Scanner; 

public class RockPaperScissors 
{ 

    public static void main(String[] args) 
    { 
     int wins = 0, losses = 0, ties = 0; 
     boolean output; 
     Scanner scan = new Scanner(System.in); 
     System.out.print("(R)ock, (P)aper, (S)cissors, or quit: "); 
     String playerChoice = scan.nextLine(); 
     while (playerChoice.equals("quit") == false) 
     {  
      playerChoice = playerChoice.toUpperCase(); 
      String computerChoice = getComputerChoice(); 
      if(playerChoice.equals(computerChoice) != true) 
      { 
       output = playerWins(playerChoice, computerChoice); 
       if (output == true) 
       { 
        wins++; 
       } 
       else if (output == false) 
       { 
        losses++; 
       } 
      } 
      else 
      { 
       ties++; 
       System.out.println("Tie!"); 
      } 
     } 
     System.out.println("QUIT"); 
     System.out.println("Wins: " + wins); 
     System.out.println("Losses: " + losses);    
     System.out.println("Ties: " + ties); 
     scan.close(); 
    } 
    public static String getComputerChoice() 
    { 
     Random gen = new Random(); 
     int num = gen.nextInt(30) + 1; 
     if (num % 3 == 2) 
     { 
      return "R"; 
     } 
     else if (num % 3 == 1) 
     { 
      return "P"; 
     } 
     else 
     { 
      return "S"; 
     } 
    } 
    public static boolean playerWins(String playerChoice, String computerChoice) 
    { 
     if (playerChoice.equals("R") == true) 
     { 
      if (computerChoice.equals("P") == true) 
      { 
       System.out.println("My Point! \nP beats R"); // Rock is beaten by paper 
       return false; 
      } 
      else if (computerChoice.equals("S") == true) 
      { 
       System.out.println("Your Point! \nR beats S"); // Rock beats scissors 
       return true; 
      } 
     } 
     else if (playerChoice.equals("P") == true) 
     { 
      if (computerChoice.equals("R") == true) 
      { 
       System.out.println("Your Point! \nP beats R"); //Paper beats rock 
       return true; 
      } 
      else if (computerChoice.equals("S") == true) 
      { 
       System.out.println("My Point! \nS beats P"); //Paper is beaten by scissors 
       return false; 
      } 
     } 
     else if (playerChoice.equals("S") == true) 
     { 
      if (computerChoice.equals("P") == true) 
      { 
       System.out.println("Your Point! \nS beats P"); //Scissor beats paper 
       return true; 
      } 
      else if (computerChoice.equals("R") == true) 
      { 
       System.out.println("My Point! \nR beats S"); //Scissors is beaten by rock 
       return false; 
      } 
     } 
     return false; 
    } 
} 
+0

** 'playerChoice' **を 'main'の' while(playerChoice.equals( "quit")== false) '* loop *に更新します。 'playerChoice = scan.nextLine();' - そうでなければ、別の選択肢を要求することなく無限ループします。 –

+0

* "...私の画面が浸水しないように助けてくれる"とはどういう意味ですか?出力の一部を表示できますか? – jww

答えて

1

この2行は、問題となっている。

String playerChoice = scan.nextLine(); 
while (playerChoice.equals("quit") == false) { 

あなたは1行を読んで、その後何度も何度もその行をチェックしています。ループ内に新しい行を読む必要があります。あなたが今それを持っている方法、それは無限の時間を何度も繰り返し同じことをしようとしているだけです。

試してみてください。

String playerChoice = scan.nextLine(); 
while (playerChoice.equals("quit") == false) { 

    //do all of the stuff that is already inside your loop 

    playerChoice = scan.nextLine(); 
} 

これは、再び最後の入力を処理した後たびに、ユーザー入力を取得します。それを解決する

String playerChoice = scan.nextLine(); 

一つの非常に良い方法は以下の通りです::上記のコードは何

String playerChoice; 
while((playerChoice = scan.nextLine()).equals("quit") == false) 
{ 
    //more code 
} 

0

あなたは一度だけ、ユーザーの入力をチェックしている、それはループの前にあります、playerChoiceは、.equals("quit")の直前に設定されています。このメソッドを使用する場合は、ループの最後にもう1行は必要なく、ループの先頭に置いてください。playerChoiceを設定してください。

関連する問題