2015-05-09 26 views
1

我喜歡這個類來比較Y座標(降序) ,我有預定義的Point類。ClassCastException使用比較器排序數組時

在主類,我送可以比較Y陣列,它是保持點(類型=點)Arrays.sort(array);,這讓我ClassCastExeption

我怎麼能解決這個問題。


public class CompareY implements Comparator<Point> { 

public CompareY(){ 
} 

@Override 
public int compare(Point a1, Point a2) { 

    if (a1.y > a2.y) 
     return -1; 
    else if (a1.y < a2.y) 
     return 1; 
    else { 
     if (a1.x < a2.x) 
      return 1; 
     else if (a1.x > a2.x) 
      return -1; 
     else 
      return 0; 
    } 

} 
+0

你能指出你在哪裏得到一個錯誤..? –

+0

並告訴我們你如何使用你的構造。順便說一句,你可以通過在每行的末尾添加空格來實現問題的線性問題 – Dude

+1

你可以在哪裏得到錯誤代碼。看起來您正在嘗試對包含不同類型對象的「Object」數組進行排序。 – CKing

回答

2

方法Arrays.sort(Object[] a)預計實現Comparable一種類型。如果要創建CompareY對象的數組,則應注意CompareY未實現Comparabe,因此在運行時會得到ClassCastException,因爲CompareY不能轉換爲Comparable。同樣,如果您正在創建Pointarray一個對象,你仍然會得到,因爲Points一個ClassCastException沒有實現Comparable

要解決此問題:

  1. 創建Pointarray對象。
  2. 使用Arrays.sort方法需要Comparator

例子:

Point[] points = new Point[]{new Point(..),new Point(...)}; 
Arrays.sort(points,new CompareY()); 

或者,你可以有Point類實現Comparable和定義自然排序的Points。然後您可以直接使用Array.sort(Object[] a)方法。

+0

我已經在點類中實現了可比較的接口,並且它正常工作。使用Array.sort(points,new CompareY());它的工作原理,感謝您的回答。 –

+0

@serdarözer我發佈這個問題的一部分。在實現「Comparable」之後,你還得到一個'ClassCastException'嗎?你能用創建'array'的代碼編輯你的問題,並將它傳遞給'Arrays.sort'方法嗎? – CKing

+0

@serdarözer那麼你是說即使在實施「Comparable」之後你還面臨這個問題?我不認爲這是可能的。這就是說,我相信我的答案指出(雙關意圖)你在正確的方向,所以不要忘記upvote並接受答案:) – CKing