Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi.
ich hab folgendes Problem:
Ich soll eine ArrayList<Point> sortieren, mit einem Divide & Conquer verfahren. Ergo dacht ich mir, nimmste Mergesort, da meines Wissens nach das Collectionsortverfahren, das man ja importieren kann, Mergesort ist.
Nun Meine Frage, ich will dass die Objekte entsprechend ihren X Koordinaten Sortiert werden, wie mache ich das?
Worum es geht ist, dass du nur dann sortieren kannst, wenn du auch eine Ordnung auf deinen zu sortierenden Objekten definierst. Also musst du dem Sortierer beibringen, dass PunktA < PunktB genau dann wenn gilt PunktA.X < PunktB.X (genauer <= aber egal für hier).
Das machst du, in dem du entweder "Comparable" in deiner Point-Klasse implementierst (falls du auf den Code zugreifen kannst) oder eben einen Comparator erstellst. Beides würde zu einer Funktion führen, die du so implementieren musst, dass entweder -1, 0 oder 1 zurückgegeben wird. Je nachdem welcher der beiden Punkte (nach deiner Ordnungsdefinition) kleiner oder größer oder gleich dem anderen ist.
Wie tfa schon geschrieben hat, habe ich das gleiche Problem, die ArrayList zu sortieren.
Habe in meine Point-Klasse jetzt mal Comparable implementiert:
Code:
class Point implements Comparable <Point>{
int x;
int y;
Point (int x, int y){
this.x = x;
this.y = y;
}
public String toString (){
String s = "";
s = "" + "(" + x + ", " + y + ")";
return s;
}
public int compareTo (Point p){
if( this.x < p.x )
return -1;
if( this.x > p.x )
return 1;
return 0;
}
}
Weiß jetzt aber nicht, wie die Sortierung weiter geht. Muss man eine Sortiermethode schreiben oder gibt es da nicht eine vordefinierte Methode .sort()?
Danke, jetzt funktioniert die Sortierung schonmal halbwegs.
Habe aber jetzt folgendes Problem:
Die Punkte sollen zuerst nach der x-Koordinate sortiert werden. Dies geht ja nun schon. Sollten jedoch Punkte mit der gleichen x-Koordinate eingegeben werden, so sollen diese Punkte nach der y-Koordinate in die Liste einsortiert werden.
Wenn ich nun einen dritten if-Fall verwende (this.x = p.x) erhalte ich eine Fehlermeldung "Can't match boolean to int". Steh anscheinend grad auf dem Schlauch... Eine zweite compareTo-Methode kann ich ja nicht einfach erstellen, da weiß das Programm ja nicht mehr, auf welche es zugreifen soll.