while循环仅与System.out.println一起运行

时间:2014-03-04 17:57:06

标签: java loops while-loop

Runnable r1 = new Runnable(){
    public void run(){
        playing = true;
        while (playing){

            if(worldBlock[curString].equals("Ocean")){
                chosenBlock = 0;
            }
            else if(worldBlock[curString].equals("Fish")){
                chosenBlock = 1;
            }
            else if(worldBlock[curString].equals("Shark")){
                chosenBlock = 2;
            }
            else if(worldBlock[curString].equals("Treasure")){
                chosenBlock = 3;
            }
        }
    }
};
blockChooser = new Thread(r1);
blockChooser.run();

好的。这就是我现在正在使用的代码。问题是这个东西只发生一次,而且再也不会发生,但是如果我在内部插入System.out.println()它可以正常工作,但是,我的控制台是垃圾邮件。这里最聪明的做法是什么?可能是什么原因造成的?

1 个答案:

答案 0 :(得分:0)

你的循环没有“只运行一次”。它循环无限,但由于你没有输出任何东西或者没有退出循环,你无法分辨。当您输入System.out.println(...)时,它会向您显示。

您需要以某种方式实现循环终止符,将playing(更好地命名为isPlaying)设置为false

例如:

isPlaying = true;
while (isPlaying){

    if(worldBlock[curString].equals("Ocean")){
        chosenBlock = 0;
    }  else if(worldBlock[curString].equals("Fish")){
        chosenBlock = 1;
    }  else if(worldBlock[curString].equals("Shark")){
        chosenBlock = 2;
    }  else if(worldBlock[curString].equals("Treasure")){
        chosenBlock = 3;
    }  else  {
       isPlaying = false;   //Break out of the loop!
    }
}

但是,由于你总是在每次迭代中检查相同的东西(curString数组中的worldBlock - 元素),这将仍然永远不会退出。 ..unun worldBlock[curString]碰巧等于海洋,鱼类,鲨鱼或宝藏。

虽然我只能根据您的有限代码示例猜测这一点,但我怀疑是while循环应该完全消除,并用一个简单的if-else块替换:

if(worldBlock[curString].equals("Ocean")){
    chosenBlock = 0;
}  else if(worldBlock[curString].equals("Fish")){
    chosenBlock = 1;
}  else if(worldBlock[curString].equals("Shark")){
    chosenBlock = 2;
}  else if(worldBlock[curString].equals("Treasure")){
    chosenBlock = 3;
}

试一试。这对你有用吗?