-1

我正在用一个移动的块做一些东西,直到它到达 x=11 坐标。我尝试在一个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 处停止,它会继续无限期地运行。有谁知道我还能怎么做?

4

3 回答 3

1

听起来您希望您的块不要移动到 x = 11 以下。在这种情况下,请尝试:

    if (left == true) {
        if(x - 5 < 11){
            x = 11;
        }
        else{
            x -= 5;
        }
    }
于 2013-06-30T15:05:46.983 回答
1

任何程序

while(true){
     //any code that coesn't contain break
}

将永远运行

每次循环它都会执行循环中的代码,然后返回到 line while(true),如果条件仍然为真(很明显它将是,因为true它会再次返回。

这些类型的循环(偶尔)具有合法用途,但必须包含break;在循环中的某个位置才能退出它们。

在你的情况下,两个循环都有这个问题,但内部循环是它实际上被卡住的那个

  while (true) {
     if (x == 11) {
         left = false;
     }
  }

踩着它:

  1. 是真的==真 --> 是的,进入循环
  2. 是 x == 11 --> 可以这么说;
  3. 将左设置为假;
  4. 是真的==真 --> 是的,进入循环
  5. 是 x == 11 --> 可以这么说;
  6. 将左设置为假;
  7. 是真的==真 --> 是的,进入循环

又一轮又一轮

你已经说过你想要一些东西向下移动(5),除非它低于 11,以下将实现这一点

while (x>11){
    x-=5;
    if (x<11){
       x==11;
    }
}

这有点低效,但我假设它是一个更复杂问题的简化

于 2013-06-30T14:57:57.433 回答
0

尝试

    boolean isValid=false;

    while(!isValid){
      if(left==true)
       {
        x -= 5;
          if(x ==11)
           {
            left=false;
            isValid=true;
           }
       }
   }

如果是这种情况不知道你的情况

于 2013-06-30T15:10:38.977 回答