【问题标题】:While-loop freezing循环冻结
【发布时间】: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 &lt; 3 &amp;&amp; computerS &lt; 3) 那么你将永远继续调用 newChoice(并且可能在某个时候得到 StackOverflowError)...
  • 我认为您不会增加您的 humanScomputerS 变量...
  • 什么线程正在执行这段代码?

标签: java while-loop freeze


【解决方案1】:

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

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

这应该是

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

【讨论】:

  • 是的,草率的错误。但是在将我的 while 循环更改为 - while(HScore
  • @Bengan 学习使用调试器将帮助您解决这两个问题,并更好地利用我们两个时代
猜你喜欢
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2014-10-02
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多