2017-07-18 3 views
0

私はアナロジックでモデルを構築しています。コードは次のとおりです。アニロジックの2つのオブジェクトを比較する

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%の確率で犠牲者を選ぶと考えられています。 2人の戦闘員は同じ犠牲者を共有することはできませんが、それは機能しません。 && !p.equals(victim)は助けにはなりませんが、選択した人が既に犠牲者ではないことを確認する必要があります。

+0

'People'クラスのequals(Object o)メソッドとhashCodeメソッドをオーバーライドしましたか? – MaxPower

+0

''犠牲者 'はnullなので 'p.equals(victim)'は常に 'false'を返します。別のアプローチを使用する必要があります。例えば。犠牲者の集まりを作り、そこに仲間を追加する –

答えて

0

Peopleクラスのequals()メソッドをオーバーライドする必要があります。 equals()の内部は、Peopleのユニークなフィールドを比較します。

0

私はこの問題をPeopleクラスにという変数を作成して解決しました。これは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 
      } 
    } 
}` 
関連する問題