Java 交换无效

Java swap invalid

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

这是我的代码:

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

原来地震不是按震级排序的。

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

您可以考虑在 Arrays.sort 中使用 Java 的 bult 并传递比较地震震级的 lambda 函数。

编辑:Integer.compare可用于比较。

Arrays.sort( (a, b) -> Integer.compare( a.magnitude, b.magnitude) );

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

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