logo

 

 
 

 

 

 

 

 

 

Übersicht aller Übungen

  • Übung 1
  • Übung 2
  • Übung 3
  • Übung 4
  • Übung 5
  • Übung 6
  • Übung 7
  • Übung 8
  • Übung 9
  • Übung 10
  • Übung 11
  • Übung 12




    alle Lösungen (als *.zip)


  • Lösung Übung 1
  • Lösung Übung 2
  • Lösung Übung 3
  • Lösung Übung 4
  • Lösung Übung 5
  • Lösung Übung 6
  • Lösung Übung 7
  • Lösung Übung 8
  • Lösung Übung 9
  • Lösung Übung 10
  • Lösung Übung 11
  • Lösung Übung 12

  • Übung 11 Home    

    Ü 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:
    1. eine RuntimeException wirft
    2. 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.
     
     
     

     


     
           
    © 2002 by Daniel Stojceski • Zylous@web.de