2016-01-23 101 views
-1

我有一個二維數組,並且我試圖根據第二列對數組進行排序。我想發表COSTI Ciudatu here的答案,但我得到以下錯誤:基於第二列對Java中的二維數組進行排序

The method sort(T[], Comparator) in the type Arrays is not applicable for the arguments (double[][], ArrayComparator)

我該如何解決呢?

到目前爲止我的代碼是:

import java.util.Comparator; 

class ArrayComparator implements Comparator<Comparable[]> { 
    private final int columnToSort; 
    private final boolean ascending; 

    public ArrayComparator(int columnToSort, boolean ascending) { 
     this.columnToSort = columnToSort; 
     this.ascending = ascending; 
    } 

    public int compare(Comparable[] c1, Comparable[] c2) { 
     int cmp = c1[columnToSort].compareTo(c2[columnToSort]); 
     return ascending ? cmp : -cmp; 
    } 
} 

import java.util.Arrays; 
import java.util.Comparator; 

public class Convex { 

    public static void mysort(double points[][], int n){ 
     Arrays.sort(points, new ArrayComparator(1, true));    
    } 
} 
+1

請問您可以發佈您的代碼嗎?我懷疑ArrayComparator沒有實現比較器接口。 –

+0

1.最好展示你的相關代碼,最好是[mcve],否則我們將如何知道你做錯了什麼?我們將如何幫助您解決問題? 2.考慮使用單維數組或自定義類的對象列表,而不是使用二維數組。 –

+0

我剛加了代碼 – danielpanatha

回答

1

一個原始double不是Comparable,所以你需要適應這種比較來比較double[]

class ArrayComparator implements Comparator<double[]> { 
    private final int columnToSort; 
    private final boolean ascending; 

    public ArrayComparator(int columnToSort, boolean ascending) { 
     this.columnToSort = columnToSort; 
     this.ascending = ascending; 
    } 

    public int compare(double[] c1, double[] c2) { 
     int cmp = Double.compare(c1[columnToSort], c2[columnToSort]); 
     return ascending ? cmp : -cmp; 
    } 
} 
+0

謝謝!現在我知道它是如何工作的! – danielpanatha

相關問題