2017-07-18 5 views
0

Je construis un modèle avec anylogic. Voici le code:Comparer deux objets dans 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 
      } 
    } 
} 

Le chasseur est censé choisir sa victime avec la probabilité de 20%. Deux combattants ne peuvent pas partager la même victime, ce qui ne fonctionne pas. Je dois m'assurer que les personnes choisies ne sont pas déjà la victime, bien que && !p.equals(victim) n'aide pas ...

+0

Avez-vous des égaux (substituée o Object) et des méthodes hashCode dans votre classe 'People'? – MaxPower

+0

'p.equals (victime)' retournera toujours 'false' puisque' victim' est nul. Vous devriez utiliser une autre approche. Par exemple. créer une collection de victimes et y ajouter du peopel –

Répondre

0

Vous devez surcharger la méthode equals() de la classe People. Inside equals() compare un champ unique de People.

0

J'ai résolu le problème en créant une variable isChased dans la classe People, définie comme false. Ensuite, je mis en œuvre ce dans la méthode de chasse Fighter classe:

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