gpt4 book ai didi

Java 交换无效

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:09 26 4
gpt4 key购买 nike

我正在研究一种旨在按升序对数组进行排序的方法。该数组由地震标记对象组成,我需要做的是按对象的“震级”属性对数组进行排序。我尝试了选择排序,但似乎元素没有正确交换。

这是我的代码:

private void sortAndPrint(int numToPrint){
Object[] quakeArray= quakeMarkers.toArray();

int indexMax;
for(int i=0; i<quakeArray.length-1; i++) {
indexMax = i;
float max = ((EarthquakeMarker)(quakeArray[i])).getMagnitude();

for( int j =i+1; j<quakeArray.length;j++){
if(((EarthquakeMarker)(quakeArray[j])).getMagnitude()>max)
indexMax = j;
}
//swap it
Object temp = quakeArray[i];
quakeArray[i] = quakeArray[indexMax];
quakeArray[indexMax] = temp;
}
//sort finished

for(int i =0; i< numToPrint; i++) {
System.out.println(((EarthquakeMarker)quakeArray[i]).getProperty("title").toString());
}
}

事实证明,地震并不是按震级排序的。

console output

在我看来,交换可能有问题,因为 Java 是按值传递的。如果是这样,我该如何解决?还是问题出在其他地方?

最佳答案

您的选择排序逻辑不正确。当您检测到一个新的更高值(value)的条目时,您永远不会设置最大值。您可能希望在更新 indexMax 时更新 max,或者删除 max 并只使用 indexMax。

对于更实用的方法,在大多数情况下,您可能应该使用可用的内置功能,例如 Array.sort()。

关于Java 交换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894918/

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