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()它可以正常工作,但是,我的控制台是垃圾邮件。这里最聪明的做法是什么?可能是什么原因造成的?
答案 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;
}
试一试。这对你有用吗?