0

我正在模拟挖掘机的公用事业罢工。我将挖掘机建模为具有自由空间运动的运输车。我有另一个称为 Utility 的代理。公用事业的人口称为公用事业。

我想计算运输商的公用事业罢工。运输车有检测能力,比如如果|Z(transporter) - Z(utility)| <= 3不会发生任何事故!但是如果|Z(transporter) - Z(utility)| > 3发生罢工,运输者需要停止工作一段时间,例如2分钟,然后重新开始工作。

我创建了一个名为 v_utilityStrikeNumber 的变量和一个名为 e_checkUtilitystrike 的事件。这是@Benjamin 为其他人建议的。我为事件 Action 编写了以下代码。

for (Utility u: main.utilities){
dist = distanceTo(u);
 return dist; 
}

if (dist <= 3){
main.utilities_remove(u);
}
else{
v_utilityStrikeNumber += 1; 
u.v_isUtilityStrike = true; 
state_excavator.receiveMessage("interrupt"); 
}

我收到以下错误:

  1. u 无法解析为变量
  2. dist 无法解析为变量
  3. u 型不可见

你能告诉我如何解决它们吗?谢谢你。

4

1 回答 1

1

这些错误主要是编码错误。让我们一一解决:

  1. u 只能在第一个 for 循环内访问,不能在 for 循环外再次使用它。u 是每个循环迭代中的不同实用程序。那么,当您跳出循环时,您指的是哪个实用程序?如果您打算在 for 循环中继续,例如检查每个实用程序的 dist 是否小于 3,那么在结束之前不要关闭 for 循环。

  2. 您的模型中似乎没有一个名为 dist 的变量?因此,只需double在第一次引入 dist 之前添加。

  3. 我相信1应该解决这个问题。

所以你的代码看起来像这样:

for (Utility u: main.utilities){
double dist = 0;
dist = distanceTo(u);


if (dist <= 3){
main.remove_utilities(u);
}
else{
v_utilityStrikeNumber += 1; 
u.v_isUtilityStrike = true; 
state_excavator.receiveMessage("interrupt"); 
}
}

试试这个,让我知道你是否仍然有错误。

于 2021-02-11T17:18:07.587 回答