2016-10-27 17 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()です。また、typoを指摘するために、Math.signum(diff) – Palamino

+0

@Palaminoを返すことでif/elseロジックを回避することもできます。私はそれが新しいJavaプログラマーのために理解しやすいようにifロジックを残すことを好むだろう – Robin