2016-11-20 25 views
0

私は現在、私のゲームでwhileループを実装するのに苦労しています。アイデアは、ユーザーの種類を除いてゲームを継続することで「-1」ロックペーパー・ハサミ・ループゲームの無限ループ

// declare variables 
    int player, computer; 
    int counter = 0; 
    // player input 
    System.out.println("Rock, Paper, Scissors!"); 
    System.out.print("Enter 0 for paper, 1 for Scissors, or 2 for Rock (-1 to quit) : "); 
    player = sc.nextInt(); 
    while (player != -1) { 

     // switch statement for player 
     switch (player) { 
     case 0: 
      System.out.println("Player picks Paper"); 
      break; 
     case 1: 
      System.out.println("Player picks Scissors"); 
      break; 
     case 2: 
      System.out.println("Player picks Rock"); 
      break; 
     case -1: 
      System.exit(-1); 
      break; 
     default: 
      System.out.println("Invalid input"); 
     } 

     // generate a random number for computer 
     Random randomGen = new Random(); 
     computer = randomGen.nextInt(3); 

     // switch statement for computer 
     switch (computer) { 
     case 0: 
      System.out.println("Computer picks Paper"); 
      break; 
     case 1: 
      System.out.println("Computer picks Scissors"); 
      break; 
     case 2: 
      System.out.println("Computer picks Rock"); 
      break; 
     default: 
     } 

     // output for each condition 
     if (player == 2 && computer == 1) 
      System.out.println("Player Wins!"); 
     else if (player == 1 && computer == 0) 
      System.out.println("Player Wins!"); 
     else if (player == 0 && computer == 2) 
      System.out.println("Player Wins!"); 
     else if (computer == 1 && player == 0) 
      System.out.println("Computer Wins!"); 
     else if (player == 0 && computer == 2) 
      System.out.println("Computer Wins!"); 
     else if (player == 1 && computer == 2) 
      System.out.println("Computer Wins!"); 
     else 
      System.out.println("Draw"); 
     sc.close(); 
    } 
+1

への呼び出しを削除する必要があります信じているあなたは、この行重複を持っています= 2) '。 2回目は 'else if(computer == 0 && player == 2)だったのでしょうか? –

答えて

1

あなたのplayer値を更新したことがありません。ループ本体の末尾にplayer = sc.nextInt()を追加します。 =(プレイヤー== 0 &&コンピュータ場合は `他:またはは、

int player; 
while ((player = sc.nextInt()) != -1) { 

そしてような何かを、私はあなたにもsc.close();

+0

使用後に 'Scanner'を閉じるのは良い方法です - なぜでしょうか? –

+1

@ OleV.V。 OPはループボディの 'Scanner' **を閉じています。また、 'System.in'をラップする可能性が高いので、' Scanner'を閉じると 'System.in' *グローバル*も閉じます。最後に、私は明示的な終了(もしそうでなかった場合)の上で、['try-with-resources'](http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)を好むでしょう。 –

+0

これはループ外に移動する必要があります。私もあまりにも便利なために試してリソースを使用する(この場合、 'sc'はメソッドの外で宣言されていると思います;もしそうなら、リソースは試してみることができず、' close() 'の呼び出しが必要です明確にするためにもこの方法を利用してください)。 –