“while”语句如何影响RinSim的执行?

时间:2016-08-19 19:47:08

标签: java rinsim

我的项目中有一些while语句,特别是类型:

while(!rm.getPosition(this).equals(destination.get())) {
    rm.moveTo(this, destination.get(), time);
}

此外,我还有一些while让代理等待消息。

我的问题是,这些while是否只影响我的代理人的行为,或者另一方面,这会延迟我的其他代理人的执行吗?也就是说,整个程序会一直等到我的完成时间吗?

我正在使用版本4.1.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移近指定目的地。两种可能性:

  1. 如果到达目的地的距离足够小,可以在可用时间内移动(取决于对象的速度),将到达目的地,程序将退出循环。 moveTo(..)方法只会消耗所需的时间,从而在timeLapse对象中留下任何不需要的时间。

  2. 或者,如果目的地距离timeLapse的可用时间内的距离较远,timeLapse将耗尽,车辆将无法到达目的地(但它确实越来越近了。这会导致循环永不退出,moveTo(..)会忽略对RoadModel的任何后续调用,因为timeLapse为空。

  3. 所以是的,使用此代码会影响整个程序,并可能导致无限循环。正确的方法是将while替换为if。然后,您可以添加else子句,以便在到达目的地时执行拍卖。