2017-03-19 5 views
0

マンハッタン距離に基づいて、(x、y)平面上の特定の位置に最も近いn個のイベントを見つけるアプリケーションを実装しています。 私は最大のPriorityQueueを使用して、見つかったイベントをマンハッタン距離比較器で保存しています。このキューは常に最大のmanDistanceイベントを持つ必要がありますが、これは常に発生するわけではありません。 ループ内でpq.poll()を使用してこのキューの結果を表示しましたが、削除後にキューが再配置されないことがありました。Javaプライオリティキューは変わった動作をします

マイコンパレータ:メインメソッドで

public class LocationComparator implements Comparator<Event> { 
private double xCord,yCord; 

public LocationComparator(double x,double y){ 
    xCord=x; 
    yCord=y; 
} 
@Override 
public int compare(Event x,Event y){ 
    double xManDist=Math.abs(x.getxCord()-xCord)+Math.abs(x.getyCord()-yCord); 
    double yManDist=Math.abs(y.getxCord()-xCord)+Math.abs(y.getyCord()-yCord); 
    return (int)(yManDist-xManDist); 
} 
} 

印刷、それを:

System.out.println(MessageFormat.format("Closest Events to location {0},{1}",x,y)); 
     while (!(events.isEmpty())){ 
      Event temp=events.poll(); 
      System.out.println(temp); 
      System.out.println(temp.calcManDistance(x, y)); 

出力:あなたが見ることができるように

Closest Events to location 0,0 
name: Event 5 
x: 3.43 
y: -4.97 
8.398549367213874 
name: Event 10 
x: -8.98 
y: -0.49 
9.469052759377341 
name: Event 3 
x: -0.77 
y: 7.92 
8.693576027826397 
name: Event 2 
x: -0.57 
y: -6.56 
7.127381509823561 
name: Event 6 
x: -0.56 
y: -3.38 
3.935261527783056 

、イベントが降順ではありません!しかし、時々彼らはそうです。私はこの一貫性のない行動を引き起こす原因を追跡することはできません。何か不足していますか?

この場合、このメソッド内でキューを生成しています。 最小優先度キューから自分のイベントを取得します。peekイベントはx軸上の最も近いイベントでなければなりません。次に、サイズが5より小さい場合は、最も近いイベントを保持するmaxPriorityQueueに追加します。そのpeek manDistanceは、イベントに比べて高いです。私がmaxPriorityQueueからpeekイベントのmanDistanceよりも高いxのイベントに到達した場合、最も近い5つのイベントが見つかりました。

pqTemp - PEEKは、PEEKが最大マンハッタン距離を持つイベントである

manDistanceFarthest --holds現在の最も近いイベントX軸上の位置に最も近いminPriorityQueue内のすべてのイベントを保持しています。

+2

あなたのコンパレータで 'int'にキャストしても、あなたが望むことはできません。 – user2357112

答えて

0

ここで唯一の問題は、キャストto intです。例として、このデルタが1未満の場合、0が得られます。これは、等価を意味します。これは真ではありません。 私は全体像を理解していません。 pqTempでコンパレータをどのように使用しますか? Comparableイベントがあるかもしれませんか?

+0

私は投稿していない異なるコンパレータを持っています – SirWinning

+0

intにキャストするのではなく、1,0と-1を返すべきですか? – SirWinning

関連する問題