我目前正在制作一个纸张石头剪刀游戏,你在电脑上玩。我用于控制谁达到最高分数的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");
}
}
}
}
如果'(人类<3台&&电脑<3)'那么你就会不断的打电话'newChoice'永远(并且有可能在某些时候的StackOverflowError).. – assylias
我不认为你正在增加你的'humanS'或'computerS'变量...... – brso05
什么线程正在执行这个代码? – talex