Lösungsvorschlag: Spezialmethoden
TODO 1 & 2
// TODO 1: Ergänzen Sie den Datentyp Boot um eine toString()-Methode, geben Sie darin alle Attribute aus. /** * Fügt alle Attribute einem String hinzu * @return Gibt diesen String zurück */ @Override public String toString() { return "Boot{" + "Marke='" + marke + '\'' + ", Farbe='" + farbe + '\'' + ", Kaufpreis=" + kaufpreis + ", Seriennummer='" + seriennummer + '\'' + ", imWasser=" + (imWasser?"Ja":"Nein") + '}'; } // TODO 2: Passen Sie die Ausgabe an, dass nicht mehr printInfos() verwendet wird, sondern die toString() Methode for (Boot b : boote) { System.out.println(b); }
TODO 4 & 5 & 6
// TODO 4: Machen Sie das Boot vergleichbar. Vergleichen Sie die Boote nach deren Kaufpreis. public class Boot implements Comparable<Boot>{ ... /** * Boot vergleichbar machen. * @param o anderes Boot * @return - wenn dieses günstiger, 0 bei gleich teuer, + wenn dieses teurer */ @Override public int compareTo(Boot o) { return (int)(kaufpreis - o.getKaufpreis()); } } // TODO 5: Sortieren Sie die Boote nach ihrem Preis. Collections.sort(boote); // TODO 6: Geben Sie die Liste der Boote hier aus. for (Boot b : boote) { System.out.println(b); }
@Override public int compareTo(Boot o) { return (int)(kaufpreis - o.getKaufpreis()); }
Was passiert hier? Wir vergleichen den Kaufpreis von zwei Booten. Ist dieses Boot teurer wie das Boot o
so muss eine positive Zahl zurückgegeben werden. Ist also der kaufpreis
100'000 und o.getKaufpreis()
ist 80'000 ist das Resultat 20'000, also eine positive Zahl. Genau so funktioniert es auch anders herum, versuchen Sie es aus!
(int)(kaufpreis - o.getKaufpreis());
Die Methode compareTo
muss ein int
zurückgeben, da der Kaufpreis ein double
ist, und das Resultat der Berechnung auch ein double
ist muss das Resultat in ein int
gecastet (Typumwandlung) werden. Mehr Infos zu Typumwandlungen finden Sie hier.