/**
* relativ "saubere" Variante, allerdings werden mehrere 'return' verwendet, das sollten Anfänger nicht machen. V2 ist für Anfänger besser
*/
public int compareV1(Person p1, Person p2) {
if (p1.alter > p2.alter) {
return -1;
} else if (p1.alter < p2.alter) {
return 1;
} else {
//Auf Gleichheit musst du nicht mehr prüfen
return 0;
}
}
/**
* "sauberste" Variante, so wie man es lernen sollte.
*/
public int compareV2(Person p1, Person p2) {
//Beachte: returnvalue wird hier am Anfang nicht initialisiert, der Compiler warnt dich also, wenn du es auswerten willst, so lange noch kein Wert gesetzt ist.
int returnvalue;
if (p1.alter > p2.alter) {
returnvalue = -1;
} else if (p1.alter < p2.alter) {
returnvalue = 1;
} else {
//Auf Gleichheit musst du nicht mehr prüfen
returnvalue = 0;
}
//Erst an diesem Punkt hat returnvalue garantiert einen Wert und darf weiterverwendet werden.
return returnvalue;
}
/**
* Diese Variante hat weniger Else-Bereiche, ist als etwas resourcenschonender, liefert aber auch immer direkt das Ergebnis. Für Anfänger nicht geeignet.
*/
public int compareV3(Person p1, Person p2) {
if (p1.alter > p2.alter) {
return -1;
}
if (p1.alter < p2.alter) {
return 1;
}
//Auf Gleichheit musst du nicht mehr prüfen
return 0;
}
/**
* Für mehrere Vergleiche
*
* @param p1
* @param p2
* @return
*/
public int compareV4(Person p1, Person p2) {
//Kürzen wir das Ganze etwas ab, für Integer gibt es bereits eine Compare-Funktion, schau dir deren Quellcode mal an
int returnvalue = Integer.compare(p1.alter, p2.alter);
//Alter verschieden, Ergebnis liefern
if (returnvalue != 0) {
return returnvalue;
}
//Alter gleich, es muss weiter verglichen werden
returnvalue = compareTwoStrings(p1.name, p2.name);
//Keine weiteren Vergleichsoptionen vorhanden, also einfach den Wert liefern. Ansonsten hier returnValue wieder auf 0 prüfen und den nächsten Parameter prüfen
return returnvalue;
}
/**
* String-Vergleich ohne Nullpointer-Exception
* @param s1 String1
* @param s2 String2
* @return Beide Werte null: 0, s1 == null: 1, s2 == null: -1
*/
private int compareTwoStrings(String s1, String s2) {
if (s1 == null) {
//Wenn beide Namen auf null gesetzt sind, dann als "gleich" betrachten, also Ergebnis 0
//Nur p1.name == null ? 1
return s2 == null ? 0 : 1;
}
if (s2 == null) {
//nur p2.name == null? -1
return -1;
}
//ansonsten echt vergleichen lassen
return s1.compareTo(s2);
}