我的项目中有一些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子句以在到达目的地时执行拍卖。

关于java - “while”语句如何影响RinSim的执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39046665/

10-10 21:19