2017-02-06 56 views
-1

我有座標類,我想使座標對象可比。Java Override CompareTo方法

public class Coordinates implements Comparable<Coordinates> { 

private int row; 
private int column; 

想法是將Coordinates對象插入到PriorityQueue中,並將它們排序。

@Override 
public int compareTo(Coordinates o) { 
    if (row < o.row) { 
     return row; 
    } 
    if (row > o.row) { 
     return o.row; 
    } 
    if (row == o.row) { 
     if (column < o.column) { 
      return column; 
     } 
     if (column > o.column) { 
      return o.column; 
     } 
    } 
// return 0; 
} 

這是我的嘗試,但我不知道我預期返回什麼以及如何返回它。我希望我的最小座標具有最高優先級。我寫還是該函數需要返回值 - 註釋行

+3

最小的是什麼意義?像,(1,2)'應該如何與'(2,1)'比較? –

+0

您可以計算每個對象從'(0,0)'的距離,然後使用它進行比較。 – ByeBye

+0

我想0,5擁有最高優先級比1,5和1,0優先級高於1,3 –

回答

1

我想0,5具有最高優先級比1,5和1,0優先級高於1,3

實際上,您希望進行反向排序。但是,優先級隊列首先放置最低值,所以自然順序使最低值先出現。

要返回< 0小於和> 0大於

@Override 
public int compareTo(Coordinates o) { 
    if (row < o.row) return -1; 
    if (row > o.row) return +1; 

    if (column < o.column) return -1; 
    if (column > o.column) return +1; 
    return 0; 
} 

您可以Integer.compare

@Override 
public int compareTo(Coordinates o) { 
    int cmp = Integer.compare(row, o.row); 
    if (cmp == 0) 
     cmp = Integer.compare(column, o.column); 
    return cmp; 
} 

注意簡化:如果你假設行和列是非負面你可以寫

@Override 
public int compareTo(Coordinates o) { 
    int cmp = row - o.row; 
    if (cmp == 0) 
     cmp = column - o.column; 
    return cmp; 
} 
+2

[評論存檔在聊天](http:///chat.stackoverflow.com/rooms/135053/discussion-on-answer-by-peter-lawrey-java-override-compareto-method)。 –

-2
if (row < o.row) { 
    return row; 
} 
else if (row > o.row) { 
    return o.row; 
} 
else 
{ 
    if(row == o.row) 
    { 

     if (column < o.column) { 
      return column; 
     } 
     if (column > o.column) { 
      return o.column; 
     } 
    } 
} 

修復的if-else BRACH,希望你所得到的回報缺少語法錯誤

+0

這不是一個解決方案...... – ByeBye

+0

而我寫的函數仍然期望返回值 - 註釋行 – ShayHaned

+0

我的意思是你肯定是在那個開玩笑:) – ShayHaned