Übungsblatt 9

Werbung
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
Herunterladen