2

最初の値で 2D double 配列 (double[][]) をソートしようとしました。例: {1.0226342823592962,0.0}, {1.0395582845873155,1.0} 最大値から開始します。これは私が使用するコードです(Javaで生成された半分)

java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {

        @Override
        public int compare(double[] o1, double[] o2) {
            // TODO Auto-generated method stub
            return 0;
        }


    });

ただし、「indexMatrix」は後で変更されません。値が互いに非常に近いため、値を int にキャストすると、すべて 1 になり、並べ替えることができないため、public int の比較と関係があると思います。それとも別のものですか?

4

4 に答える 4

1

比較メソッドを実装する必要があります。そこにあるのは単なるテンプレートです。デフォルトでは戻り値 0 は比較された値が等しいことを意味するため、変更されていません。その他の戻り値は、実際の状況に基づいて -1 および +1 です。

于 2013-06-07T08:20:33.577 に答える
1

いいえ、double を整数にキャストしません。Anは、戻りパラメーターとして期待されるintものです。とが等しいcompare()場合は 0 を返し、 の場合は 0 未満の値を返し、 の場合は 0 より大きい値を返します。そのために使用できます:o1o2o1 < o2o1 > o2Double.compare()

java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {
    @Override
    public int compare(double[] o1, double[] o2) {
        // note that o2 comes first here to sort in descending order
        return Double.compare(o2[0], o1[0]);
    }
});
于 2013-06-07T08:27:55.600 に答える
1

なぜそれらを整数にキャストするのですか? Double.compareTo(Double)sort メソッドで method を使用するだけです:

public static void main(String[] args) {

    double[][] indexMatrix = new double[][] {
                  new double[] { 1.02, 100 }, 
                  new double[] { 1.03, 123 },
                  new double[] { 1.01, 321 } };

    Arrays.sort(indexMatrix, new Comparator<double[]>() {
        @Override
        public int compare(double[] o1, double[] o2) {
            return Double.compare(o2[0], o1[0]);
        }
    });

    for (double[] d : indexMatrix)
        System.out.println(Arrays.toString(d));
}

出力:

[1.03, 123.0]
[1.02, 100.0]
[1.01, 321.0]
于 2013-06-07T08:22:06.833 に答える