如何为3个圆圈做compareTo方法?

时间:2016-04-08 01:04:36

标签: java compareto

我试图做一个首先按半径排序的compareTo方法。如果相同,则按x坐标排序。如果相同,则按y坐标排序。

circle类有一个带Point和(double)半径的构造函数。我不太确定如何解决这个问题,因为互联网上的其他compareTo方法只是比较2个对象。

1 个答案:

答案 0 :(得分:1)

按顺序比较多个属性时,您只需比较第一个属性。如果它们是相同的,那么你比较第二个。如果它们是相同的,那么你比较第三个。

假设你正在使用java.awt.Point,你可以这样做:

class Circle implements Comparable<Circle> {
    private Point  point;
    private double radius;

    // ... code ...

    @Override
    public int compareTo(Circle that) {
        int cmp = Double.compare(this.radius, that.radius);
        if (cmp == 0)
            cmp = Double.compare(this.point.getX(), that.point.getX());
        if (cmp == 0)
            cmp = Double.compare(this.point.getY(), that.point.getY());
        return cmp;
    }

    // ... code ...
}

如果您需要对3个圆圈进行排序,请将它们放入数组并对数组进行排序:

Circle[] circles = { new Circle(...),
                     new Circle(...),
                     new Circle(...) };
Arrays.sort(circles);