2013-09-12 3 views
1

У меня возникли проблемы с сортировкой моего динамического бинарного массива. я искал и нашел это решение:Сортировка двумерного массива двумерного массива java

Double[][] sortedOutput = new Double[length][4]; 

//... 
// processing and filling my tab like that 
sortedOutput[k][0] = content[i].getLeftSpeed); 
sortedOutput[k][1] = content[i].getRightSpeed(); 
sortedOutput[k][2] = content[i].getNormAvgPowOutput(); 

// ... 
// Now i'm trying to sort the tab 
Arrays.sort(sortedOutput, new java.util.Comparator<double[]>() 
{ 
    public int compare(double[]a, double[]b) 
    { 
    return Double.compare(a[0], b[0]); 
    } 
}); 

Но почему-то я не работает:

The method sort(T[], Comparator<? super T>) in the type Arrays is not applicable for the arguments (Double[][], new Comparator<double[]>(){}) 

Почему я не могу использовать Arrays.sort с double?

Я также попытался сделать класс:

package IOControl; 

import java.util.Comparator; 

public class CompareDoubleArray implements Comparator<double[]> 
{ 
    private int column; 

    public CompareDoubleArray(int column) 
    { 
     this.column = column; 
    } 

    public int compare(double[] arg0, double[] arg1) 
    { 
     return Double.valueOf(arg0[column]).compareTo(Double.valueOf(arg1[column])); 
    } 
} 

Как я должен использовать свой класс? Что я сделал не так? Любая помощь будет приятной, спасибо :)

ответ

2

Вам необходимо набрать Comparator по телефону Double[]. A double[] - это не то же самое, что Double[]. Один из них - это массив примитивов, другой - массив объектов Double, которые являются обертками для примитивов.

Arrays.sort(sortedOutput, new java.util.Comparator<Double[]>() 
{ 
    public int compare(Double[]a, Double[]b) 
    { 
    return Double.compare(a[0], b[0]); 
    } 
}); 
+0

Окей я попробовал это, но теперь я до сих пор с этой проблемой: 'java.lang.NullPointerException \t в IOControl.ReadCSV $ 1.compare (ReadCSV.java:326) \t в IOControl.ReadCSV $ 1.compare (ReadCSV.java:1) \t в java.util.TimSort.countRunAndMakeAscending (Unknown Source) \t в java.util.TimSort.sort (Unknown Source) \t в java.util.TimSort.sort (Неизвестно Источник) \t at java.util.Arrays.sort (Неизвестный источник) \t в IOControl.ReadCSV.run (ReadCSV.java:322) \t at en.window.Main.main (Main.java:46) ' – trolologuy

+0

@trolologuy Убедитесь, что ваш массив' sortedOutput' правильно заполнен. А именно, проверьте, что 'sortedOutput [i] [0]' is ** не null ** для всех 'i'. Похоже, что один может быть пустым, а затем вы получите «NullPointerException» во время распаковки при вызове 'Double.compare' – cyon

+0

Okey вы правы, некоторые из них« null »... но я не понимаю, почему, поэтому я попытался назначить значения «null» равны 0.0. Но я не могу, потому что 'Оператор == не определен для типа аргументов double, null'. Как я могу это исправить? – trolologuy

0

Arrays.sort принимает только , как argument.So вы не можете использовать multidimensional array здесь

Попробуйте этот код может помочь вам.

for(Double[] d : sortedOutput){ 
    Arrays.sort(d , new Comparator<Double>(){ 
     @Override 
     public int compare(Double o1, Double o2) { 

     //implement logic here 
     } 
    }); 
} 
+0

Спасибо за ответ, но что вы подразумеваете под «// реализуете логику здесь»? Что я должен сейчас делать? Как и раньше? – trolologuy

+0

@trologuy да, как и раньше – Prabhaker

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