Java While循环永远不会结束

时间:2014-01-27 09:57:25

标签: java while-loop

我遇到A while循环问题。看起来它永远不会结束,tryLadowanie()永远不会运行。我想这有点问题:while((xPosition!= xTarget)&&(yPosition!= yTarget))。 Update()工作得很好,它从A点到B点就好了,但是一旦它在B点它仍然运行。你觉得怎么样?

这是我的代码:

public void lecimy(Lotnisko source, Lotnisko dest){
    xPosition = source.coords.getX();
    yPosition = source.coords.getY();
    xTarget = dest.coords.getX();
    yTarget = dest.coords.getY();

    while( (xPosition != xTarget) && (yPosition != yTarget) ) {
        update();

        try {
            sleep(100);// ok 
        }
        catch (InterruptedException e) {
            System.out.println("Error");
        }
    }

    tryLadowanie();
}

public void update() {
    paliwo -= 0.05;
    double dx = xTarget - xPosition;
    double dy = yTarget - yPosition;
    double length = sqrt(dx*dx+dy*dy);

    dx /= length;
    dy /= length;

    if (Math.abs(dest.coords.getX() - source.coords.getX()) < 1)
        dx = 0;
    if (Math.abs(dest.coords.getY() - source.coords.getY()) < 1)
        dy = 0;
        xPosition += dx;
        yPosition += dy;
    }
}

2 个答案:

答案 0 :(得分:4)

您遇到逻辑错误:

你说:“如果destination.X离source.X比'1'更近,那就不要再靠近它了(dx = 0)。”

这可能会永远持续下去。

要回答您的评论问题(缺少空间并在评论部分进行编辑):

if (Math.abs(dest.coords.getX() - source.coords.getX()) < 1)if (Math.abs(dest.coords.getY() - source.coords.getY()) < 1)移出到while循环的状态。

您不希望在update()方法内部关闭时停止更改位置,而是希望循环停止。否则循环将继续运行,update()方法将不执行任何操作。

答案 1 :(得分:3)

使用double==比较!= - 变量必然会让您遇到麻烦,因为最小的舍入错误会破坏您的比较。使用类似Math.abs(xPosition - xTarget) < tolerance的内容。