2016-05-18 2 views
0

1人のプレイヤーが連続して4勝を上げるまで走り続けなければならないロックペーパーハサミゲームがあります。すべてが正しく動作しているようですが、1人のプレイヤーが4連勝になると、1時間余分にゲームが実行され、なぜ表示されません。私のループは1時間余分に実行されていますが、なぜ私は見ることができません

// while文

while(!done){  
    done=play1Win.consecutiveWins==4||play2Win.consecutiveWins==4; 
    player1Roll=random(); 
    player2Roll=random(); 

//このようなものは、ALL whileループの内側にあるが、私はそれの一部を掲載します。誰もが正しい方向に私を指すことができる場合

Paper beats Rock! Player 2 wins 
    Player 1 wins- 0 
    Player 2 wins- 1 
    Paper beats Spock! Player 2 wins 
    Player 1 wins- 0 
    Player 2 wins- 2 
    Rock beats Scissors! Player 2 wins 
    Player 1 wins- 0 
    Player 2 wins- 3 
    Rock beats Scissors! Player 2 wins 
    Player 1 wins- 0 
    Player 2 wins- 4  // SHOULD STOP HERE 
    Paper beats Rock! Player 1 wins  
    Player 1 wins- 1 
    Player 2 wins- 0 

:ITはLOOPの終わりに

 if(player1Roll==SCISSORS&&player2Roll==PAPER){ 
     System.out.println("Scissors beats Paper! Player 1 wins");  
     lastWinner=PLAYER1; 

     if (lastWinner==PLAYER1){ 
     play1Win.consecutiveWins++; 
     play2Win.consecutiveWins=0; 
     } 
    } 
    if(player1Roll==PAPER&&player2Roll==ROCK){ 
     System.out.println("Paper beats Rock! Player 1 wins");  
     lastWinner=PLAYER1; 

     if (lastWinner==PLAYER1){ 
     play1Win.consecutiveWins++; 
     play2Win.consecutiveWins=0; 
     } 

//すべて同じ'S THIS

 System.out.println("Player 1 wins- " +play1Win.consecutiveWins); 
     System.out.println("Player 2 wins- " +play2Win.consecutiveWins); 

、出力は、このですそれは素晴らしいでしょう。 ありがとう!

+3

'へ while (!done){...}

を書き換えるようにそれあなたの中の一部にします、 'done'はfalseです。つまり、ゲームはまだループに入り、ループ全体を終了します。簡単な修正は、ループの最後に 'done'を設定することです(つまり、whileループの最後のステートメント)。 – nbokmans

+0

ありがとうございました!それはそれを修正した。私はそれが単純なものだと思ったが、私はそれを見ることができなかった。私はJavaにはかなり新しいです。 – user3516525

答えて

1

はあなたがループの初めに、あなたの行って条件を設定whileループ

done=play1Win.consecutiveWins==4||play2Win.consecutiveWins==4; 
0

内の最後の行に次の行を置く必要があります。つまり、player2が4回連続して勝利したとしても、doneは、次のループが既に開始されるまでtrueに設定されません。 whileループの最後に次の行を移動します。すぐに4連勝した後、ループを閉じるには

done=play1Win.consecutiveWins==4||play2Win.consecutiveWins==4; 
0

、終了基準は、ループの終わりではない、次のループの最初にチェックする必要があります。あなたは、ループの先頭で終了基準をチェックすると、あなたのゲームは、実際にループに入るまでので、trueに設定されているdone`

while(play1Win.consecutiveWins==4||play2Win.consecutiveWins==4){ ... }

関連する問題