2017-07-18 2 views
0

Ich baue ein Modell mit anylogic. Hier ist der Code:Vergleich zweier Objekte in 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 
      } 
    } 
} 

Der Kämpfer soll sein Opfer mit der Wahrscheinlichkeit von 20% wählen. Zwei Kämpfer können nicht dasselbe Opfer teilen, was nicht funktioniert. Ich muss sicherstellen, dass die ausgewählten Leute nicht das Opfer bereits ist, obwohl && !p.equals(victim) nicht hilft ...

+0

Sie equals überschrieben Haben (Object o) und hashCode Methoden in Ihrem 'People' Klasse? – MaxPower

+0

'p.quals (Opfer)' wird immer 'falsch' zurückgeben, da 'Opfer' null ist. Sie sollten einen anderen Ansatz verwenden. Z.B. Erstelle eine Sammlung von Opfern und füge ein paar Leute hinzu –

Antwort

0

Sie müssen gleich() Methode der Klasse Menschen überschreiben. Inside equals() vergleicht ein eindeutiges Feld von People.

0

Ich habe das Problem gelöst, indem ich eine Variable isChased in der Klasse People erstellt, die als false festgelegt ist. Dann implementiert ich dies in den Verfolgern Methode der Fighter Klasse:

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 
      } 
    } 
}` 
Verwandte Themen