1

我的项目中有一些while陈述,特别是以下类型:

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

另外,我有一些while让代理等待消息的方法。

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

我正在使用版本 4.1.1

4

1 回答 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。两种可能:

  1. 如果到目的地的距离足够小,可以在可用时间内(取决于物体的速度)行进,则将到达目的地,程序将退出循环。该moveTo(..)方法只会消耗它需要的时间量,而不会在timeLapse对象中消耗任何不需要的时间。

  2. 或者,如果目的地比在可用时间内可以行驶的距离更远timeLapsetimeLapse则车辆将耗尽并且车辆将无法到达其目的地(但它确实更近了)。这会导致循环永远不会退出,任何后续调用都会moveTo(..)被 忽略,RoadModel因为timeLapse是空的。

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

于 2016-08-20T07:46:02.787 回答