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()。
我正在研究一种旨在按升序对数组进行排序的方法。 该数组由地震标记对象组成,我需要做的是按对象的 "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()。