【问题标题】:Sort bidimensionnal double array java排序二维双数组java
【发布时间】:2013-09-12 08:50:24
【问题描述】:

我在对动态双向数组进行排序时遇到了一些问题。 我搜索并找到了这个解决方案:

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.sortdouble 一起使用?

我也尝试过上课:

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]));
     }
 }

我应该如何使用我的课程?我做错了什么? 任何帮助都会很好,谢谢:)

【问题讨论】:

    标签: java arrays double


    【解决方案1】:

    您需要在Double[] 上输入您的Comparatordouble[]Double[] 不同。一个是基元数组,另一个是 Double 对象数组,它们是基元的包装器。

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

    【讨论】:

    • Okey 我试过了,但现在我仍然遇到这个问题:java.lang.NullPointerException at IOControl.ReadCSV$1.compare(ReadCSV.java:326) at IOControl.ReadCSV$1.compare(ReadCSV.java:1) at java.util.TimSort.countRunAndMakeAscending(Unknown Source) at java.util.TimSort.sort(Unknown Source) at java.util.TimSort.sort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at IOControl.ReadCSV.run(ReadCSV.java:322) at en.window.Main.main(Main.java:46)
    • @trolologuy 检查您的sortedOutput 数组是否正确填充。即检查所有isortedOutput[i][0] 是否not null。听起来一个可能是空的,然后你在取消装箱时得到一个NullPointerException,同时调用Double.compare
    • 好吧,你是对的,有些是null...但我不明白为什么,所以我尝试将null 值分配为0.0。但我不能因为The operator == is undefined for the argument type(s) double, null。我该如何解决?
    • @trolologuy 我不确定我是否完全理解您如何更改代码。用更新的代码提出一个新的 SO 问题可能值得吗?似乎不再与对数组的排序有关,而是与它的初始化方式有关。
    • 是的,你是对的,我认为你回答了我的问题。我在这里以更具体的方式问了我的问题:link。如果我最终找到解决问题的方法,我将接受您的问题。感谢您的帮助!
    【解决方案2】:

    Arrays.sort 只接受single dimensional array 作为参数。所以你不能使用multidimensional arrayhere

    试试这个代码可能对你有帮助。

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

    【讨论】:

    • 感谢您的回答,但 //implement logic here 到底是什么意思?我现在该怎么办?和以前一样吗?
    • @trologuy 是的,和以前一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多