我已经尝试了三个小时来解决这个问题。我相信语法是正确的,但方法不起作用。这个类接受一个 Point2D 类型的 arrayList(我定义的类),它包含一个点的 x 和 y 元素。我正在尝试按升序大小对 arrayList 进行排序(例如(200、200)、(200、400)、(400、200)、(400、300)、(400、400)...等,所以排序 x 点,然后排序 y 点)。indexOfSmallest 最小的 for 循环中的 if 条件(如果我正确的话)应该可以工作,但它只会对 x 值进行正确排序。有任何想法吗?先感谢您!!
import java.util.ArrayList;
public class Point2DSelectionSort {
public Point2DSelectionSort() {
}
public static void sort(ArrayList<Point2D> a) {
int index, index2,indexOfNextSmallest;
for (index = 0; index < a.size( ) - 1; index++){
indexOfNextSmallest =
indexOfSmallest(index, a);
interchange(index,indexOfNextSmallest, a);
}
//a.get(0), a.get(1),...,a.get(index) are sorted.
}
/**
* Precondition : i and j are legal indices for the ArrayList a.
* Postcondition: a.get(i) and a.get(j) have been interchanged.
*/
private static void interchange(
int i, int j, ArrayList<Point2D> a) {
Point2D temp;
temp = a.get(i);
a.set(i, a.get(j));
a.set(j, temp);
}
/**
* @return the index of the lexicographically first value among
* a.get(startIndex), a.get(startIndex+1),...,a.get(a.size( ) - 1)
*/
private static int indexOfSmallest(
int startIndex, ArrayList<Point2D> a) {
Point2D min = a.get(startIndex);
int indexOfMin = startIndex;
//Point2D otherPair = (Point2D) min;
for (int index = startIndex + 1; index < a.size( ); index++){
if((a.get(index).getFirst() < min.getFirst()) || (( a.get(index).getFirst() == min.getFirst() ) && ( a.get(index).getSecond() < min.getSecond() ))){
min = a.get(index);
indexOfMin = index;
}
}
return indexOfMin;
}
}