2016-10-24 75 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

如果'(人类<3台&&电脑<3)'那么你就会不断的打电话'newChoice'永远(并且有可能在某些时候的StackOverflowError).. – assylias

+1

我不认为你正在增加你的'humanS'或'computerS'变量...... – brso05

+0

什么线程正在执行这个代码? – talex

回答

0

变量太多。 humanS和HScore以及compterS和CScore似乎都是重复的,也是问题的根源。

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

这应该是

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

是的,马虎的错误。但是在将我的while循环更改为 - (HScore <3 && CScore <3){0}时,程序给予立即赢得第一步3分的人。 – Bengan

+0

@Bengan学习使用调试器可以帮助您解决这两个问题,并且可以更好地利用我们的时代 – ControlAltDel