二维数组排序不正确

时间:2020-11-10 10:10:14

标签: java arrays

我正在尝试根据第二列对二维数组进行排序,这是数组:

[1.1, 60.0]
[1.2, 66.66]
[1.3, -1.0]
[1.4, 50.0]
[1.5, 100.0]
[2.1, -1.0]
[2.2, -1.0]
[2.3, -1.0]

我研究了对多维数组进行排序的过程,并创建了以下代码:

    private void sortKnowledgeScores(double[][] knowledgescores){
    Arrays.sort(knowledgescores, new Comparator<double[]>() {
        @Override
        public int compare(double[] o1, double[] o2) {
            double itemOne = o1[1];
            double itemTwo = o2[1];
            // sort on item id
            if(itemOne < itemTwo){
                return (int) itemOne;
            }
            return (int) itemIdTwo;
        }

这会将数组重新排列为:

[2.3, -1.0]
[2.2, -1.0]
[2.1, -1.0]
[1.3, -1.0]
[1.1, 60.0]
[1.2, 66.66]
[1.4, 50.0]
[1.5, 100.0]

前三个值正确,但是将50放在60和60.66以下。如何调整我的sortKnowledgeScores函数以基于第一列以升序对数组进行排序?

3 个答案:

答案 0 :(得分:3)

比较器应返回1,0,-1(更大,更相等,更少)。

通常,如果比较函数返回正结果,则第一个元素较大,如果它们等于0,则返回负值意味着第二个obj较大。

您返回的是值而不是比较结果。

您可以查看此doc

您需要将代码更改为:

public int compare(double[] o1, double[] o2) {
        return (int) o1[1] - o2[1];
 }

@Mick指出-请注意,您使用的索引:索引0用于第一列,索引1用于第二列

答案 1 :(得分:2)

首先,您使用了错误的索引。数组中的第一个元素位于索引0

您可以使用Comparator-Factory Comparator.comparingDouble

Comparator.comparingDouble(array -> array[0])
Arrays.sort(knowledgescores, Comparator.comparingDouble(array -> array[0]))

答案 2 :(得分:0)

您比较索引为“ 1”的元素。这将转换为第二列。如果排序应考虑第一列,则应使用索引“ 0”。

加上-如前所述-compare方法的工作方式如下:

将此对象与指定对象进行比较。当此对象小于,等于或大于指定的对象时,返回负整数,零或正整数。