Ü B U N G 12
Aufgabe 1
Gegeben ist folgendes Interface, welches beschreibt, wie sich
ein Stack verhält.
Download der Lösung (StackInterface.java)
public interface StackInterface {
public void push(int x) throws StackFullException; // neue Zahl auf den Stack legen
public void pop() throws StackEmptyException; // oberste Zahl von dem Stack löschen
public int top() throws StackEmptyException; // oberste Zahl des Stacks zurückgeben
public int size(); // Anzahl der Elemente des Stacks
}
Implementieren Sie das gegebene Interface mit einer Klasse Stack,
der Zahlen vom Typ int in einem Array speichert. Beachten Sie dabei
die typischen Eigenschaften eines Stacks, sowie die Exceptions, die
auftreten können:
- Der Zugriff ist nur auf das oberste Element des Stacks möglich
- StackFullException --> es wird versucht ein Element auf
einen vollen Stack zu legen
- StackEmptyException --> es wird versucht, ein Element von
einem leeren Stack zu löschen, bzw. das oberste Element eines
leeren Stacks auszugeben
Implementieren Sie daher auch die Fehlerklassen
StackFullException und StackEmptyException als Erweiterung der
bereits in Java vorhandenen Klasse RuntimeException.
Zum Testen Ihrer Implementierung können Sie folgende Main-Methode
verwenden:
public static void main(String[] args) {
// Stack der Größe 10
Stack s = new Stack(10);
// 12 Elemente auf den Stack legen und Exception abfangen
for (int i=10; i<=120; i+=10) {
try {
s.push(i);
} catch (StackFullException e) {
System.out.println(e.getMessage());
System.out.println("Element "+i+" konnte nicht hinzugefügt werden");
}
}
// Größe
System.out.println("\nGröße des Stack = " + s.size() + "\n");
// 12 Elemente löschen und ausgeben
for (int i=1; i<=12; i++) {
try {
System.out.println(s.top() + " wird gelöscht");
s.pop();
} catch (StackEmptyException e) {
System.out.println(e.getMessage());
}
}
}
Die Ausgabe sollte folgendermaßen aussehen:
10 wurde hinzugefügt
20 wurde hinzugefügt
30 wurde hinzugefügt
40 wurde hinzugefügt
50 wurde hinzugefügt
60 wurde hinzugefügt
70 wurde hinzugefügt
80 wurde hinzugefügt
90 wurde hinzugefügt
100 wurde hinzugefügt
Stack ist bereits voll
Element 110 konnte nicht hinzugefügt werden
Stack ist bereits voll
Element 120 konnte nicht hinzugefügt werden
Größe des Stack = 10
100 wird gelöscht
90 wird gelöscht
80 wird gelöscht
70 wird gelöscht
60 wird gelöscht
50 wird gelöscht
40 wird gelöscht
30 wird gelöscht
20 wird gelöscht
10 wird gelöscht
Stack ist leer
Stack ist leer
Übung 12b - Exceptions
Aufgabe 1
Gegeben sei folgende Klasse Konto, die eine
einfaches Bankkonto simmulieren soll: Download der Lösung (Konto.java)
Ein Konto
besitzt u.a. Methoden zum Einzahlen und Abheben von Geld. Dabei
macht das Einzahlen hier grundsätzlich keine Probleme. Allerdings
darf ein Konto nicht überzogen werden, das bedeutet, es darf nicht
mehr Geld abgehoben werden, als auf dem Konto verfügbar
ist.
In der vorliegenden Implementierung wird nur dann Geld
von einem Konto abgehoben, wenn der entsprechende Betrag verfügbar
ist. Anderenfalls wird eine Fehlermeldung auf der Kommandozeile
ausgegeben.
Erweitern Sie die Methode abheben(double
betrag) nun so, dass sie im Fehlerfall:
- eine RuntimeException wirft
- eine selbstdefinierte Exception
KontoNichtGedecktException wirft, die eine Unterklasse
von RuntimeException darstellt
Aufgabe 2
Heisser Kaffee: Schreiben Sie eine Klasse
VirtualPerson zur Repräsentierung einer virtuellen
Person, die gerne Kaffee trinkt. Diese soll eine Methode
drinkCoffee besitzen, die als Parameter eine Kaffeetasse
(ein Objekt der Klasse CoffeeCup) erhält. Die Klasse
CoffeeCup müssen Sie demnach ebenfalls implementieren.
Dabei soll ein Tasse Kaffe als Attribut eine Temperatur (in °C)
besitzen.
Da unsere virtuelle Person weder zu kalten noch zu
heissen Kaffee mag, soll die Methode abhängig von der
Kaffeetemperatur Exceptions werfen. Sobald der Kaffee die Grenze von
65 °C unterschreitet, soll eine TooColdException
ausgelöst werden, ab 85°C eine TooHotException. Ist die
Temperatur in Ordnung, kann optional ein entsprechender Hinweis auf
der Kommandozeile ausgegeben werden.
Schreiben Sie nun eine
weitere Klasse U12b_2, die in der main-Methode die
anderen Klassen testen soll. Legen Sie je eine virtuelle Person und
eine Kaffeetasse an. Die Temperatur des Kaffees soll als
Eingabeparameter beim Programmaufruf über die Kommandozeile
übergeben werden.
Überlegen Sie sich, welche Exceptions in
Ihrem Programm auftreten können und treffen Sie entsprechende
Vorkehrungen. Das Programm soll in jedem Fall ohne eine
Fehlermeldung beendet werden können, abgefangene Exceptions sollen
dabei aber angezeigt werden.