我的项目中有一些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/