2016-01-23 2 views
-1

У меня есть двумерный массив двойников, и я пытаюсь сортировать массив на основе второго столбца. Пытаюсь ответ, отправленный Costi Ciudatu here, но я получаю следующее сообщение об ошибке:Сортировка 2-мерного массива в 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 не реализует интерфейс Comparator. –

+0

1. Лучше всего показать свой уместный код, лучше всего как [mcve], иначе как мы узнаем, что вы делаете неправильно? Как мы сможем помочь вам решить вашу проблему? 2. Рассмотрим использование одномерного массива или Список объектов пользовательского класса, а не использование 2D-массива. –

+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

Смежные вопросы