不停在xcoördinate

时间:2013-06-30 14:55:03

标签: java testing if-statement while-loop

我正在制作一个移动的块,直到它击中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时停止,它会无限期地继续运行。 有谁知道我怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

任何带有

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

将永远运行

每次循环循环时,它将执行循环中的代码,然后返回到行while(true),如果条件仍然为真(显然它将是true它会去又回来了。

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

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

中的循环
  while (true) {
     if (x == 11) {
         left = false;
     }
  }

踩到它:

  1. 是真== true - >是的,输入循环
  2. 是x == 11 - >让我们说是的;
  3. 设置为false;
  4. 是真== true - >是的,输入循环
  5. 是x == 11 - >让我们说是的;
  6. 设置为false;
  7. 是真== true - >是的,输入循环
  8. 再次回合

    你已经表示你希望某些东西向下移动(按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;
           }
       }
   }

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