IT 1 – SS 2011 – Übungsblatt 7 Abzugeben bis 18.5.2011 – 12:00 Uhr Beispiel 7.1 [SimpleList.java, Umkehren.java] SimpleList ist ein Interface, das eine einfache Liste von Strings beschreibt. Der Zugriff auf eine SimpleList ist nur mit den angegebenen Methoden removeLast() und addFirst() möglich: interface SimpleList { /** * Entfernt den letzten String aus der SimpleList * und liefert ihn zurück. Wenn die SimpleList leer * ist, liefert removeFirst() null zurück . */ public String removeLast(); /** Fügt s als ersten String in die SimpleList ein . */ public void addFirst(String s); } Implementieren Sie eine Klasse Umkehren mit einer Methode static void invert(SimpleList list), die die Reihenfolge der Strings in list umkehrt, also z.B. die Liste mit den Elementen ("a","b","c","d","e") in die Liste mit den Elementen ("e","d","c","b","a") umwandelt. Implementieren Sie zum Testen von Umkehren auch eine Klasse mit dem Interface SimpleList. Diese Klasse ist ebenfalls abzugeben. Beispiel 7.2 Schreiben Sie eine Klasse Datum mit dem Konstruktor Datum(int jahr, int monat, int tag). Fügen Sie in der Klasse Zeitpunkt aus Beispiel 2.1 einen Konstruktor Zeitpunkt(Datum tag, int stunde, int minute) hinzu. Implementieren Sie in den Klassen Datum und Zeitpunkt aus Beispiel 10.7 folgende Methoden: public boolean equals(Object obj), public int hashCode() Zwei Instanzen von Datum bzw. Zeitpunkt sollen genau dann gleich sein, wenn alle Attribute gleich sind. Fügen Sie in der Klasse Datum eine statische Methode public static Datum createDatum(int jahr, int monat, int tag) hinzu. Die Methode soll eine Referenz von Datum zurückliefern, die den übergebenen Werten entspricht. Diese Methode soll für gleiche Werte jahr, monat und tag immer die gleiche Referenz zurückgeben, d.h. erzeugte Referenzen wiederverwenden. Hinweis: Das lässt sich z.B. dadurch erreichen, dass Sie alle erzeugten Objekte in einem HashSet speichern und bei Erzeugen eines neuen Objekts nachsehen, ob es bereits ein entsprechendes Objekt im HashSet gibt. 1 IT 1 – SS 2011 – Übungsblatt 7 Beispiel 7.3 Schreiben Sie die Klasse Wohnungssuche aus Beispiel 5.4 mit einem HashSet statt einer ArrayList als Rückgabewert der Methode findeWohnung. Implementieren Sie dazu auch die Klasse Wohnung. Überlegen Sie sich insbesondere, welche Attribute eine Wohnung neben Fläche und Mietpreis noch haben sollte, und wie die Methoden public boolean equals(Object obj), public int hashCode() für die Klasse Wohnung aussehen könnten. Beispiel 7.4 Schreiben Sie eine Klasse Termin mit einem Konstruktor Termin(int jahr, int monat, int tag, String text), der für das angegebene Datum einen Termin mit dem angegebenen Text erzeugt. Sie können davon ausgehen, dass der Konstruktor immer mit einer korrekten Kombination von Jahr/Monat/Tag aufgerufen wird. Überschreiben Sie in der Klasse Termin die Methode toString() in Object so, dass toString() Jahr, Monat, Tag und Text des Termins in einem String zurückliefert. Schreiben Sie auch eine Klasse Terminverwaltung mit einem parameterlosen Konstruktor und den Methoden void add(Termin einTermin) und Termin getNaechstenTermin(). Der Konstruktor erzeugt eine leere Terminverwaltung ohne Termine. Die Methode add() fügt einen Termin zur Terminverwaltung hinzu. Wenn es in der Terminverwaltung schon einen Termin mit dem gleichen Datum gibt, wird dieser Termin durch den neuen Termin überschrieben. Die Methode getNaechstenTermin() liefert den frühesten Termin in der Terminverwaltung zurück und löscht diesen aus der Terminverwaltung. Falls die Terminverwaltung keine Termine enthält, liefert die Methode null zurück. Versuchen Sie die Termine in einem Set zu verwalten. Was muss in diesem Fall für die Klasse Termin berücksichtigt werden? Beispiel 7.5 Gegeben sei die Klasse LKW mit Methoden boolean istVerfuegbar(Tag datum), die zurückliefert, ob der LKW an diesem Tag verfügbar ist, und void reserviere(Tag datum), die den LKW für diesen Tag reserviert. Schreiben Sie die Klasse LKWFlotte, die LKWs verwaltet. Implementieren Sie dazu die Methode void add(LKW einLKW), die einen LKW zur Flotte hinzufügt. Implementieren Sie weiters die Methode boolean reserviere(int anzahlLKWs, Tag datum), die für den angegebenen Tag die angegebene Anzahl von LKWs reserviert und dann true zurückliefert. Sind für diesen Tag nicht genügend LKWs verfügbar, sollen keine Reservierungen durchgeführt und false zurückgeliefert werden. Speichern Sie die LKWs der Flotte in einem Set. Welche Voraussetzungen müssen dafür in der Klasse LKW gegeben sein? 2