我的项目中有一些while
语句,特别是类型:
while(!rm.getPosition(this).equals(destination.get())) {
rm.moveTo(this, destination.get(), time);
}
此外,我还有一些while
让代理等待消息。
我的问题是,这些while
是否只影响我的代理人的行为,或者另一方面,这会延迟我的其他代理人的执行吗?也就是说,整个程序会一直等到我的完成时间吗?
我正在使用版本4.1.1
答案 0 :(得分:1)
代码中的代码段可能会导致无限循环。我假设您的代码位于tick(..)
方法中的某个位置,如下所示:
@Override
public void tick(TimeLapse timeLapse) {
while(!rm.getPosition(this).equals(destination.get())) {
rm.moveTo(this, destination.get(), timeLapse);
}
}
输入此方法后,TimeLapse对象将包含未使用的时间。第一次调用RoadModel#moveTo(..)时,RoadModel
将尝试使用this
中可用的所有旅行时间将对象timeLapse
移近指定目的地。两种可能性:
如果到达目的地的距离足够小,可以在可用时间内移动(取决于对象的速度),将到达目的地,程序将退出循环。 moveTo(..)
方法只会消耗所需的时间,从而在timeLapse
对象中留下任何不需要的时间。
或者,如果目的地距离timeLapse
的可用时间内的距离较远,timeLapse
将耗尽,车辆将无法到达目的地(但它确实越来越近了。这会导致循环永不退出,moveTo(..)
会忽略对RoadModel
的任何后续调用,因为timeLapse
为空。
所以是的,使用此代码会影响整个程序,并可能导致无限循环。正确的方法是将while
替换为if
。然后,您可以添加else
子句,以便在到达目的地时执行拍卖。