我的项目中有一些while
陈述,特别是以下类型:
while(!rm.getPosition(this).equals(destination.get())) {
rm.moveTo(this, destination.get(), time);
}
另外,我有一些while
让代理等待消息的方法。
我的问题是,这些while
只会影响我的代理的行为,或者另一方面,这会延迟我其他代理的执行吗?即,整个程序会等到我的时间完成吗?
我正在使用版本 4.1.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
子句以在到达目的地时执行拍卖。