2016-05-29 12 views
0

ich arbeite an einigen alten Aufgaben, die von meinem Programmierkurs gegeben werden. Ich sollte eine Rectangle-Klasse mit einigen grundlegenden Funktionen und vielen Comparable- und Comparator-Klassen erstellen.eigene compareTo implementieren und Methoden vergleichen

Das ist, was ich schon habe:

public class Rectangle { 
    private int length, width; 
    public Rectangle(int length, int width) { 
     this.length = length; 
     this.width = width; 
    } 
    public int length() { 
     return length; 
    } 
    public int width() { 
     return width; 
    } 
    public int area() { 
     return length + width; 
    } 
    public int perimeter() { 
     return 2 * length + 2 * width; 
    } 
} 

public class RectangleComparable extends Rectangle implements Comparable<RectangleComparable> { 
    public RectangleComparable(int length, int width) { 
     super(length, width); 
    } 
    @Override 
    public int compareTo(RectangleComparable r) { 
     if (this.area() < o.area()) return -1; 
     else if (this.area > o.area()) return 1; 
     else return 0; 
    } 
} 

public class RectangleComparatorArea implements Comparable<RectangleComparable> { 
    private int area; 
    @Override 
    public int compareTo(RectangleComparable r) { 
     if (area < r.area()) return -1; 
     else if (area > r.area()) return 1; 
     else return 0; 
    } 
} 

public class RectangleComparatorPerimeter implements Comparable<RectangleComparable> { 
    private int perimeter; 
    @Override 
    public int compareTo(RectangleComparable r) { 
     if (perimeter < r.perimeter()) return -1; 
     else if (perimeter > r.perimeter()) return 1; 
     else return 0; 
    } 
} 

public class ComparableComparator<T> implements java.util.Comparator<T> { 
    public int compare(T o1, T o2) { 
     return 0; 
    } 
} 

Was Methoden wie .compareTo sind, .equals usw. genannt? Wie, wenn ich etwas

obj1.compareTo(obj2); 

wie kann ich obj1 beziehen, wenn ich meine eigene compareTo Methode implementieren?

Auch die ComparableComparator.compare-Methode sollte für Rechtecke und auch andere generische Typen funktionieren, aber ich habe keine Ahnung, wie man das startet.

+0

Was meinen Sie "beziehen sich obj1"? Ich bin verwirrt, was genau du versuchst zu tun. Könnten Sie ein Beispiel geben, wie die Methode verwendet würde? – 4castle

+0

wie die compareTo-Methoden in RectangleComparatorArea. Wenn ich r1.compareTo (r2) verwende, wie kann ich in meiner Methode r1 ansprechen. r2 ist parameterbasiert, aber für r1 habe ich keine Ahnung, wie ich danach in if/else fragen kann. – koin

+0

Sind Sie sicher, dass Sie nicht '' Comparator <...> '' '' '' '' Comparable <...> '' 'mit Ihren verschachtelten Klassen mischen? Es erscheint viel sinnvoller, dass sie das erste implementieren würden. –

Antwort

0
  1. this. Das ist der Verweis auf das Objekt, dessen compareTo aufgerufen wird.

  2. Sehen Sie, wie JDK-Implementierung funktioniert: java.util.Comparators$NaturalOrderComparator (diese Implementierung Detail und ist versteckt, zäh)

+0

Ich habe versucht, diese auf meinem ersten gehen, aber ich habe eine < or > ist nicht definiert für die Argumenttypen oder andere Fehler. Ich werde den Link prüfen. – koin