我遇到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;
}
}
答案 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
的内容。