gpt4 book ai didi

java - 排序功能提供不正确的结果

转载 作者:行者123 更新时间:2023-12-01 17:11:55 25 4
gpt4 key购买 nike

我想按降序对 priorities[] 进行排序,即 ...2,1,0。当我执行下面提供的代码时,我收到未排序的数组,例如

18, 14, 15, 19, 23, 37, 35, 1, 8, 24, 26, 36

为什么会发生这种情况?

double[] priorities = new double[10];
for (int i = 0; i < 10; i++)
priorities[i] = Math.round(10*Math.random();
ArrayIndexComparator comparator = new ArrayIndexComparator(priorities,1);
Integer[] sortedPriorities = comparator.createIndexArray();
Arrays.sort(sortedPriorities, comparator);


public class ArrayIndexComparator implements Comparator<Integer>
{
private final double[] array;
private int sort;

public ArrayIndexComparator(double[] array, int sort)
{
this.array = array;
this.sort = sort;
}

public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i;
}
return indexes;
}

@Override
public int compare(Integer index1, Integer index2)
{
if (sort == 0)
return Double.compare(array[index2],array[index1]); // ascending order 0,1,2,...
else
return Double.compare(array[index1],array[index2]); // descending order ...2,1,0
}
}

最佳答案

使用调试器会告诉您比较器不起作用的原因。看来你把它弄得太复杂了。比较器应该做的就是获取两个元素,比较它们并返回满足您的订购要求的结果。

您正在寻找一个可以有效反转 double “自然”顺序的比较器,因此请尝试以下操作:

double[] priorities = new double[10];
for (int i = 0; i < priorities.length; i++)
priorities[i] = Math.round(10*Math.random());
Arrays.sort(priorities, new ArrayIndexComparator());

...
...

public class ArrayIndexComparator implements Comparator<Double> {
@Override
public int compare(Double d1, Double d2) {
return -1*d1.compareTo(d2);
}
}

(简而言之。您确实应该将 ArrayIndexComparator 变成单例,但这超出了这个问题的重点)

如果你懒得这样做,你可以下载Commons-Collections并使用内置的反向比较器:

Arrays.sort(priorities, ComparatorUtils.reversedComparator(
ComparatorUtils.naturalComparator()));

然后您甚至不需要自己的自定义比较器类。

关于java - 排序功能提供不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23389401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com