2016-10-27 3 views
0

Schnelle Frage, ich habe eine Menge Probleme beim Erstellen meines eigenen TreeSet-Rechteckkomparators. Hier ist der Code, den ich habe, aber ich bin extrem verloren. Ich möchte die Bereiche der Rechtecke vergleichen und sie in aufsteigender Reihenfolge sortieren.TreeSet Rectangle Comparator

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

Antwort

0

Sie sind vollständig nach Ihren Codes verloren. Hier ist die Vergleichsklasse

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

Sie haben einen Tippfehler, es ist getHeight(). Sie können die if/else-Logik auch vermeiden, indem Sie Math.signum (diff) – Palamino

+0

@Palamino zurückgeben, danke für den Hinweis auf den Tippfehler. Ich würde es vorziehen, die wenn sonst Logik zu verlassen, wie es für neue Java-Programmierer leichter zu verstehen ist – Robin