2016-04-08 5 views
-2

私は最初にradiusで並べ替えるcompareToメソッドを実行しようとしていました。それが同じ場合は、x座標で並べ替えます。それが同じ場合は、y座標で並べ替えます。3つの円に対してcompareToメソッドを実行するにはどうすればよいですか?

circleクラスには、Pointと(double)radiusを持つコンストラクタがあります。私はインターネット上の他のcompareToメソッドが単に2つのオブジェクトを比較しているので、これについてどうすればよいかわからない。

+0

あなたは」 2つのオブジェクトを比較しています。比較には、その3つのプロパティが含まれます。 – Savior

+0

あなたが比較するにはあまりにも多くをやっていることは確かです。 2つのオブジェクトを比較するだけです。私があなたのことを正しく理解すれば、何か他のことをするのは間違いです。 – ChiefTwoPencils

+0

'Circle'クラスに' Comparable 'を実装し、独自の' compareTo'メソッドを定義することができます。 – Logan

答えて

1

このような順序で複数のプロパティを比較する場合、最初のものを単純に比較します。彼らが同じ場合は、2番目のものを比較します。そして、もし彼らが同じであれば、3番目のものを比較します。

あなたはこのようにそれを行う、あなたはjava.awt.Pointを使用していると仮定すると:あなたは、3円を並べ替える配列にそれらを入れて配列をソートする必要がある場合は

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 ... 
} 

Circle[] circles = { new Circle(...), 
        new Circle(...), 
        new Circle(...) }; 
Arrays.sort(circles); 
関連する問題