IT 1 – WS 2009/2010 – Übungsblatt 9 Abzugeben bis 18.12.2008 Beispiel 9.1 [Triple.java] Implementieren Sie die Klasse Triple mit einer Methode static boolean containsTriple(int[] liste), die true zurückliefert, wenn es eine Zahl gibt, die in liste genau dreimal vorkommt. Beispiel 9.2 [Primzahlentest.java] Implementieren Sie in einem neuen Projekt die Klasse Primzahlentest. • Diese Klasse soll eine Methode boolean isPrim(int n) enthalten, die überprüft, ob n eine Primzahl ist. Primzahlen sind alle Zahlen größer als 1, die nur durch 1 und sich selbst teilbar sind. • Weiters soll die Methode int[] getFirstPrims(int k) ein Array mit den ersten k Primzahlen zurückliefern. Hinweis: Ein int-Wert n ist durch den int-Wert p teilbar, wenn n%p==0. Der Ausdruck n%p berechnet dabei den Rest der ganzzahligen Division. Beispiel 9.3 [Telefonbuch.java] Implementieren Sie eine Klasse Telefonbuch mit den unten stehenden Methoden. Verwenden Sie als Datenstruktur für das Telefonbuch eine HashMap. Die Methode void addNumber(String name, String number) fügt einen Eintrag zum Telefonbuch hinzu, String searchNumber(String name) liefert die gespeicherte Telefonnummer für den angegebenen Namen, und boolean existsName(String name) überprüft, ob es einen Eintrag für den angegebenen Namen gibt. Im Telefonbuch kann es zu jedem Namen nur einen Eintrag geben, ein evt. vorhandener Eintrag wird von addNumber() überschrieben. Wenn es zu einem Namen keinen Eintrag gibt, liefert searchNumber() den Wert null zurück. Ein neues Telefonbuch wird mit dem Konstruktor Telefonbuch() erzeugt. Beispiel 9.4 Was passiert, wenn Sie bei einer HashMap einen Eintrag mit einem Schlüssel vornehmen, der bereits eingetragen ist? Was passiert, wenn Sie einen Eintrag mit einem Wert vornehmen, der bereits eingetragen ist? Wie überprüfen Sie, wie viele Einträge in einer HashMap vorhanden sind? 1 IT 1 – WS 2009/2010 – Übungsblatt 9 Beispiel 9.5 [Datum.java, Zeitpunkt.java, Intervall.java, Arbeitszeiten.java] Die Klasse Arbeitszeiten aus dem Projekt Aufgabenverwaltung soll realistischer gestaltet werden, sodass Wochenenden, Feiertage, Urlaube und individuelle Arbeitszeiten eingetragen werden können. Dazu sollen die Arbeitszeiten als Liste von Arbeitsintervallen gespeichert werden. • Implementieren Sie eine Klasse Datum mit dem Konstruktor Datum(int jahr, int monat, int tag). • Fügen Sie in der Klasse Zeitpunkt (Bespiel 5.6) einen Konstruktor Zeitpunkt(Datum tag, int stunde, int minute) hinzu. • Implementieren Sie die Klasse Intervall mit dem Konstruktor Intervall(Zeitpunkt beginn, Zeitpunkt ende) und den Methoden Zeitpunkt getBeginn(), Zeitpunkt getEnde(), die den Beginn und das Ende des Intervalls zurückliefern. • Implementieren Sie die Klasse Arbeitszeiten neu. Es gibt einen Konstruktor Arbeitszeiten(), der ein Objekt der Klasse Arbeitszeiten zurückliefert, in das noch keine Arbeitszeiten eingetragen sind. Mit der Methode boolen addIntervall(Intervall arbeitszeit) kann eine Arbeitszeit eingetragen werden. Diese Methode soll die angegebene arbeitszeit nicht eintragen und false zurückliefern, wenn die angegebene arbeitszeit sich mit bereits eingetragenen Arbeitszeiten überschneidet (sonst true). Die Methode List<Intervall> getArbeitszeiten(Datum tag) liefert eine Liste der Arbeitsintervalle am angegebenen tag zurück. Hinweis: Beachten Sie, dass das eingetragene Arbeitsintervall über diesen Tag hinausgehen kann. Wurde z.B. das Intervall 1.12.2008/23:00 – 3.12.2008/01:00 eingetragen, soll getArbeitszeiten(2.12.2008) eine Liste mit einem Intervall 2.12.2008/00:00 – 2.12.2008/24:00 zurückliefern. Beispiel 9.6 Implementieren Sie in der Klasse Datum eine statische Methode static boolean isCorrect(int jahr, int monat, int tag), die true zurückliefert, wenn das angegebene Datum korrekt ist, d.h. wenn der angegebene Tag existiert (z.B. nicht der 29.2.2009). Beispiel 9.7 [Person.java, Arbeitszeiten.java, Zeitpunkt.java] Implementieren Sie in der Klasse Person aus Beispiel 8.1 eine Methode Aufgabe getDringendsteAufgabe(), die aus den Aufgaben, für die die Person verantwortlich ist, die Aufgabe mit dem frühesten Endtermin zurückliefert. Implementieren Sie in der Klasse Arbeitszeiten aus Beispiel 9.5 eine Methode int getArbeitsminuten(Zeitpunkt beginn, Zeitpunkt ende), die die Summe der in Arbeitszeiten eingetragenen Minuten zwischen beginn und ende zurückliefert. 2 IT 1 – WS 2009/2010 – Übungsblatt 9 Beispiel 9.8 [Aufgabe.java, Person.java, Zeitpunkt.java] Implementieren Sie in der Klasse Aufgabe aus Beispiel 5.6 folgende Methoden: Mit void setBenoetigteZeit(int minuten), kann die benötigte Bearbeitungszeit für die Aufgabe angegeben werden. Wenn diese Methode noch nicht aufgerufen wurde, soll die benötigte Bearbeitungszeit auf 15 Minuten gesetzt sein. Die Methode int getBenoetigteZeit() soll die benötigte Bearbeitungszeit in Minuten zurückliefern. Mit der Methode void setBearbeitungszeit(int minuten) wird die bereits aufgewendete Bearbeitungszeit für die Aufgabe angegeben, int getBearbeitungszeit() liefert diese zurück. Implementieren Sie in der Klasse Person aus Beispiel 9.7 die Methode boolean isAlleEndtermineOk(Zeitpunkt jetzt), die überprüft, ob zum aktuellen Zeitpunkt die Person mit ihren angegebenen Arbeitszeiten alle Endtermine ihrer Aufgaben einhalten kann. Beispiel 9.9 [SimpleList.java, Umkehren.java] SimpleList ist ein Interface, die 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 removeLast() 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. 3 IT 1 – WS 2009/2010 – Übungsblatt 9 Beispiel 9.10 Schreiben Sie eine generische Klasse Pair<S,T>, mit einem Konstruktor Pair(S left, T right) und Methoden S getLeft(), T getRight(). Beispiel 9.11 Gegeben sind die folgenden Klassendefinitionen: public abstract class Tier { public Tier() {} } public class Vogel extends Tier { public Vogel() {} } public class Taube extends Tier { public Taube() {} private methode1() { Tier tier1 = new Tier(); Tier tier2 = new Taube(); Vogel vogel1 = new Taube(); … } } Welche der angegebenen Anweisungen in methode1() führen zu Compiler-Fehlern? Warum? 4 IT 1 – WS 2009/2010 – Übungsblatt 9 Beispiel 9.12 Gegeben ist die Klasse Wohnung mit den folgenden Methoden: class Wohnung { /* Liefert die Groesse der Wohnung in qm. */ double getGroesse(); /* Liefert den Mietpreis fuer die Wohnung. */ double getMiete(); } Schreiben Sie eine Klasse Wohnungssuche mit folgender Methode: /* * Liefert die Liste aller Wohnungen in wohnungsliste * mit zumindest der angegebenen mindestgroesse und * hoechstens der angegebenen maximalmiete zurueck. */ ArrayList<Wohnung> findeWohnung( ArrayList<Wohnung> wohnungsliste, double mindestgroesse, double maximalmiete) ; 5