【发布时间】:2016-10-24 15:26:54
【问题描述】:
我目前正在制作一个与电脑对战的剪刀石头布游戏。我用于控制谁达到最高分的 while 循环一直冻结。我希望下面的方法不是太难阅读并且有足够的信息。基本上,当我玩游戏并尝试移动时,程序就会冻结。我试过没有while循环的程序,它工作正常。我做到了,所以每一步都是一个数字。 0 代表石头,1 代表剪刀,2 代表纸。方法 computerPlayer.newChoice();是从另一个类中随机生成的数字。
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");
}
}
}
}
【问题讨论】:
-
如果
(humanS < 3 && computerS < 3)那么你将永远继续调用newChoice(并且可能在某个时候得到 StackOverflowError)... -
我认为您不会增加您的
humanS或computerS变量... -
什么线程正在执行这段代码?
标签: java while-loop freeze