我正在制作一个移动的块,直到它击中x =11coördinate。我试着在while循环中做一个while循环:
public void run() {
x = 200;
y = 200;
while (true) {
if (left == true) {
x -= 5;
while (true) {
if (x == 11) {
left = false;
}
}
}
if (up == true) {
y -= 5;
}
if (right == true) {
x += 5;
}
if (down == true) {
y += 5;
}
repaint();
try {
Thread.sleep(20);
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但它不会在x = 11时停止,它会无限期地继续运行。 有谁知道我怎么能做到这一点?
答案 0 :(得分:1)
任何带有
的程序while(true){
//any code that coesn't contain break
}
将永远运行
每次循环循环时,它将执行循环中的代码,然后返回到行while(true)
,如果条件仍然为真(显然它将是true
它会去又回来了。
这些循环(偶尔)具有合法用法,但必须在循环中的某处包含break;
才能退出它们。
在你的情况下,两个循环都有这个问题,但内循环是它实际上卡在
中的循环 while (true) {
if (x == 11) {
left = false;
}
}
踩到它:
再次回合
你已经表示你希望某些东西向下移动(按5),除非它低于11,以下将实现此目的
while (x>11){
x-=5;
if (x<11){
x==11;
}
}
这有点低效,但我假设它是一个更复杂的问题的简化
答案 1 :(得分:1)
听起来你希望你的块不要移动到x = 11以下。在这种情况下试试:
if (left == true) {
if(x - 5 < 11){
x = 11;
}
else{
x -= 5;
}
}
答案 2 :(得分:0)
尝试
boolean isValid=false;
while(!isValid){
if(left==true)
{
x -= 5;
if(x ==11)
{
left=false;
isValid=true;
}
}
}
如果是这种情况不知道你的情况