Java 不在x co和xF6停车;协调

Java 不在x co和xF6停车;协调,java,testing,if-statement,while-loop,Java,Testing,If Statement,While Loop,我用一个移动的块来做一些东西,直到它碰到x=11坐标。我尝试在while循环中执行while循环: public void run() { x = 200; y = 200; while (true) { if (left == true) { x -= 5; while (true) { if (x == 11) { left = fa

我用一个移动的块来做一些东西,直到它碰到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时停止,而是继续无限期地运行。 有人知道我还能怎么做吗?

有没有带

while(true){
     //any code that coesn't contain break
}
将永远运行

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

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

在您的例子中,两个循环都有这个问题,但内部循环就是它实际陷入的那个循环

  while (true) {
     if (x == 11) {
         left = false;
     }
  }
通过它:

  • 为真==真-->是,输入loop
  • 是x==11-->让我们这样说是的
  • 将left设置为false
  • 为真==真-->是,输入loop
  • 是x==11-->让我们这样说是的
  • 将left设置为false
  • 为真==真-->是,输入loop
  • 一次又一次

    你已经说过,你希望某个东西向下移动(5),除非它低于11,否则下面的步骤可以实现这一点

    while (x>11){
        x-=5;
        if (x<11){
           x==11;
        }
    }
    
    while(x>11){
    x-=5;
    
    如果(x听起来你不希望你的方块移动到x=11以下。在这种情况下,试试:

        if (left == true) {
            if(x - 5 < 11){
                x = 11;
            }
            else{
                x -= 5;
            }
        }
    
    if(left==true){
    如果(x-5<11){
    x=11;
    }
    否则{
    x-=5;
    }
    }
    
    试试看


    如果这种情况下不知道您的条件

    格式正确(即缩进)代码在堆栈溢出时也会下降很多;define不起作用,永远运行?因为我会这么做expect@RichardTingle定义是什么?正如在实际问题中一样,不起作用可能是从计算机崩溃到在内部循环中给出错误答案使用
    while(左)
    而不是
    true
    。永远?如果我关闭javaw.exe怎么办?除非它有
    中断
    系统。退出循环中的某个地方,否则用户将关闭其进程:).不管怎样,既然你发现了让答案完整的问题,一些解决方案将是很好的。它将一直持续下去,直到你实际摧毁计算机。@TeunissenStefan是的,如果你强迫程序结束,它将结束,但它将“正常地”永远不会结束。@a_horse_,有_no_name yea,typo:)没有问题。接受它作为答案,而不是提及[已解决]在帖子中。不,谢谢。在其他网站上,我需要提到它已经解决了,但不在这里…。-@teunissentefan没问题,stack overflow不是常见的帮助论坛,它是一个问答网站,主要目标是生成对许多人有益的有用问题和答案。你的问题得到解决是一个愉快的额外机会nifit,但不是首要目标。感谢他人总是值得赞赏的
    
        boolean isValid=false;
    
        while(!isValid){
          if(left==true)
           {
            x -= 5;
              if(x ==11)
               {
                left=false;
                isValid=true;
               }
           }
       }