2016-04-08 1 views
-2

Я пытался сделать метод compareTo, который сначала сортируется по радиусу. Если это то же самое, то сортируйте по координате x. Если это то же самое, то сортируйте по y-координате.Как сделать метод compareTo для трех кругов?

Класс круга имеет конструктор с точкой и (двойной) радиус. Я не совсем уверен, как это сделать, поскольку другие методы compareTo в Интернете просто сравнивают 2 объекта.

+0

You» re все еще сравнивает два объекта. Сравнение просто связано с тремя их свойствами. – Savior

+0

Уверен, что вы слишком много делаете в сравнении. Просто сравните с двумя объектами. Если я правильно понимаю вас, это вводит в заблуждение. – ChiefTwoPencils

+0

Вы можете реализовать 'Comparable ' в вашем классе 'Circle' и определить собственный метод compareTo. – Logan

ответ

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