2017-07-18 112 views
0

我在用anylogic建立一个模型。这里是代码:在anylogic中比较两个对象

victim = null; 
for (People p : main.people){ 

    //když je dostatečně daleko 
    if((distanceTo(p, METER)) < fightDistance){ 
      if(randomTrue(fightProbability) && !p.equals(victim)) { 
      victim = p; //set the victim 
      break; //stop scan 
      } 
    } 
} 

战斗机应该选择他的受害者的概率为20%。两名战士不能共享同一个受害者,这是行不通的。我需要确保选定的人不是受害者,尽管&& !p.equals(victim)不会帮助...

+0

你有没有在你的'People'类中重写了equals(对象O)和hashCode方法? – MaxPower

+0

'p.equals(受害人)'将始终返回'false',因为'victim'为空。你应该使用另一种方法。例如。创建一个受害者集合并添加一些peopel –

回答

0

您需要覆盖People类的equals()方法。在equals()内比较一个独特的人的领域。

0

我已经通过在People类中创建变量isChased解决了该问题,该类设置为false。然后,我实现到Fighter类的追逐方法是:

victim = null; 
for (People p : main.people){ 

    //když je dostatečně daleko 
    if((distanceTo(p, METER)) < fightDistance){ 
      if(randomTrue(fightProbability) && p.isChased != true) { //random decision 
      victim = p; //set the victim 
      p.isChased = true; 
      break; //stop scan 
      } 
    } 
}`