2016-10-24 4 views
0

私は現在、コンピューターと対戦するペーパーロッカーシザーズゲームを作っています。誰が最大得点に達したかを制御するための私のwhileループは凍っています。以下の方法が読みにくく、十分な情報があることを願っています。基本的には、私がゲームをして移動をしようとすると、プログラムがただちにフリーズします。私はwhileループなしでプログラムを試してみましたが、うまくいきます。私はそれを作ったので、すべての動きは数字です。ロックは0、はさみは1、紙は2です。メソッドcomputerPlayer.newChoice();別のクラスからランダムに生成された番号です。whileループのフリーズ

public void newChoice() { 
    while (humanS < 3 && computerS < 3) { 
     computerPlayer.newChoice(); 

     if (playerChoice == 0) { 
      viewer.jLblHumanM.setText("Sten"); 
      if (computerPlayer.choice == 0) { 
       viewer.jLblComputerM.setText("Sten"); 

      } else if (computerPlayer.choice == 1) { 
       HScore += 1; 
       viewer.jLblComputerM.setText("Sax"); 
       viewer.jLblHumanS.setText("" + HScore); 
      } else if (computerPlayer.choice == 2) { 
       CScore += 1; 
       viewer.jLblComputerM.setText("Påse"); 
       viewer.jLblComputerS.setText("" + CScore); 
      } 
     } else if (playerChoice == 1) { 
      viewer.jLblHumanM.setText("Sax"); 
      if (computerPlayer.choice == 0) { 
       HScore += 1; 
       viewer.jLblComputerM.setText("Sten"); 
       viewer.jLblHumanS.setText("" + HScore); 

      } else if (computerPlayer.choice == 1) { 
       viewer.jLblComputerM.setText("Sax"); 

      } else if (computerPlayer.choice == 2) { 
       HScore += 1; 
       viewer.jLblComputerM.setText("Påse"); 
       viewer.jLblHumanS.setText("" + HScore); 
      } 
     } else if (playerChoice == 2) { 
      viewer.jLblHumanM.setText("Påse"); 
      if (computerPlayer.choice == 0) { 
       viewer.jLblComputerM.setText("Sten"); 
       HScore += 1; 
       viewer.jLblHumanS.setText("" + HScore); 
      } else if (computerPlayer.choice == 1) { 
       viewer.jLblComputerM.setText("Sax"); 
       CScore += 1; 
       viewer.jLblComputerS.setText("" + CScore); 
      } else if (computerPlayer.choice == 2) { 
       viewer.jLblComputerM.setText("Påse"); 
      } 
     } 
    } 
} 
+1

する必要があります。.. – assylias

+1

あなたの 'humanS'や' computerS'変数をインクリメントしているとは思いません... – brso05

+0

このコードを実行しているスレッドはありますか? – talex

答えて

0

変数が多すぎます。 humanSとHScoreとcompterSとCScoreは重複しているように見えるだけでなく、あなたの問題の原因です。

while(humanS < 3 && computerS < 3){ 

(人間<3台の&&コンピュータ<3) `、あなたは永遠に` newChoice`を呼び出す維持します(そしておそらくいくつかの点ではStackOverflowErrorを取得する) `場合、これは

while(HScore < 3 && CScore < 3){ 
+0

うんざりした間違い。しかし、私のwhileループを変更した後に - (HScore <3 && CScore <3){ このプログラムは、最初の移動を勝ち取った人に3ポイントを即座に与えます。 – Bengan

+0

@Benganデバッガを使用することを学ぶことで、これらの問題の両方を解決するのに役立ちます。また、両方の時間をより有効に活用できます – ControlAltDel