2016-10-27 3 views
0

Быстрый вопрос, у меня много проблем с созданием собственного компаратора прямоугольников TreeSet. Вот код, который у меня есть, но я очень потерян. Я хочу сравнить области прямоугольников и отсортировать их в порядке возрастания.Комбинатор прямоугольных прямоугольников TreeSet

import java.util.TreeSet; 
import java.awt.Rectangle; 
import java.util.Comparator; 

public class RectComp implements Comparator<Rectangle> 
{ 
    private double width; 
    private double height; 

    public RectComp(Comparator comp) 
    { 
     this.width = width; 
     this.height = height; 
    } 

    public double getArea() 
    { 
     return width * height; 
    } 

    public int compare(Rectangle r1, Rectangle r2) 
    { 
     double diff = r1.getArea() - r2.getArea(); 

     if (diff < 0) 
      return -1; 
     else if (diff == 0) 
      return 0; 
     else 
      return 1; 
    } 

    public static void main(String[] args) 
    { 
     TreeSet<Rectangle> set = new TreeSet<>(new RectComp()); 

     set.add(new Rectangle(1, 10)); 
     set.add(new Rectangle(10, 1)); 
     set.add(new Rectangle(5, 3)); 
     set.add(new Rectangle(5, 2)); 
     set.add(new Rectangle(5, 1)); 

     for (Rectangle r : set) { 
      System.out.println(r); 
     } 
    } 
} 

ответ

0

Вы полностью потеряны в соответствии с вашими кодами. Вот сравнительный класс

public class RectComp implements Comparator<Rectangle>{ 

     public int compare(Rectangle r1, Rectangle r2) { 

      double diff = r1.getHeight()*r1.getWidth() - r2.getHeight()*r2.getWidth(); 
      if(diff < 0) 
       return -1; 
      else if (diff == 0) 
       return 0; 
      else return 1; 
     } 
} 
+0

У вас есть опечатка, это getHeight(). Вы также можете избежать логики if/else, вернув Math.signum (diff) – Palamino

+0

@Palamino спасибо за указание опечатки. Я бы предпочел оставить логику if else, поскольку ее легче понять для новых java-программистов – Robin

Смежные вопросы