-1

我已经尝试了三个小时来解决这个问题。我相信语法是正确的,但方法不起作用。这个类接受一个 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;
   }
}
4

1 回答 1

0

你的整个课程是不必要的,因为它可以被调用来代替Collection.sort()

List<Point2D> list; // assuming

Collections.sort(list, new Comparator<Point2D>() {
    public int compare(Point2D a, Point2D b) {
        return a.x == b.x ? a.y - b.y : a.x - b.x;
    }
});

瞧!


如果这是一个作业,并且您必须使用该类,请将此代码合并到您的方法中(丢弃除 sort 方法之外的所有方法):

public static void sort(ArrayList<Point2D> a) {
    Collections.sort(list, new Comparator<Point2D>() {
        public int compare(Point2D a, Point2D b) {
            return a.x == b.x ? a.y - b.y : a.x - b.x;
        }
    });
}

任务完成。

要具体回答您“我的 if 语句有什么问题”的问题,答案是“它存在”。

于 2013-04-18T02:37:41.010 回答