我有一个二维双数组,我想根据第二列对它进行排序。我写了这段代码,但是我在最后一行得到了这个错误“double不能被解除引用”。它似乎适用于字符串,但不适用于数组。任何帮助表示感谢。
import java.util.Arrays;
import java.util.Comparator;
public class Sort {
public static void main(String args[]){
//Array to sort
double[][] X = new double[][]{
{1.2,2,1,3.1},
{1,2.7,3.3},
{1,2.3,3.1},
{1.5,3.2,2.4};
//Sort the array by column 2
Arrays.sort(X, new ColumnComparator(2));
}
}
//Class that extends Comparator
class ColumnComparator implements Comparator {
int columnToSort;
ColumnComparator(int columnToSort) {
this.columnToSort = columnToSort;
}
//overriding compare method
public int compare(Object o1, Object o2) {
double[] row1 = (double[]) o1;
double[] row2 = (double[]) o2;
//compare the columns to sort
return row1[columnToSort].compareTo(row2[columnToSort]);
}
答案 0 :(得分:1)
我想你在你编写的代码中忘了在你的比较器中切换回双倍...(我的意思是,正如你所说的那样尝试使用String并且它有效,我想这就是为什么还有一些奇怪的字符串[]显然不应该在那里)
如果我假设我应该读取double [] row1 =(double [])o1,那么问题是你不能在double上调用.compareTo。你应该减去这些值。
答案 1 :(得分:1)
public class SecondColumnComparator implements Comparator<double[]> {
@Override
public int compare(double[] row1, double[] row2) {
return Double.compare(row1[1], row2[1]);
// or, before Java 7:
// return Double.valueOf(row1[1]).compareTo(Double.valueOf(row2[1]));
}
}