2016-04-08 15 views
-2

İlk yarıçapı sıralayan bir compareTo yöntemi yapmaya çalışıyordum. Bu aynı ise, x-koordinatına göre sıralayın. Bu aynı ise, y-koordinatına göre sıralayın.3 daire için bir compareTo yöntemi nasıl yapılır?

Daire sınıfında, Nokta ve (çift) yarıçaplı bir kurucu vardır. İnternette diğer compareTo yöntemleri sadece 2 nesneyi karşılaştırdığından beri bu konuda nasıl gideceğime emin değilim.

+0

You' hala iki nesneyi karşılaştırıyor. Karşılaştırma basitçe özelliklerinin üçünü içerir. – Savior

+0

Karşılaştırmada çok fazla şey yaptığınızdan emin olabilirsiniz. Sadece orada iki nesneyi karşılaştırın. Seni doğru anlarsam başka bir şey yapmak yanıltıcıdır. – ChiefTwoPencils

+0

"Circle" sınıfınızda "Karşılaştırılabilir " öğesini uygulayabilir ve kendi "compareTo" yönteminizi tanımlayabilirsiniz. – Logan

cevap

1

Birden çok özelliği benzer sırayla karşılaştırırken, yalnızca ilkini karşılaştırırsınız. Eğer aynıysa, o zaman ikincisini karşılaştırırsın. Ve eğer onlar aynıysa, o zaman üçüncü ile karşılaştırırsınız.

Eğer java.awt.Point kullandığınız varsayarsak, böyle yapmak:

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

Eğer 3 çevreleri sıralamak bir diziye koyun ve diziyi sıralamak gerekirse:

Circle[] circles = { new Circle(...), 
        new Circle(...), 
        new Circle(...) }; 
Arrays.sort(circles); 
İlgili konular