Home > Informatik > Stufe Q1 > Referenzen > 15.2 Übungen

15.2 Hinweise zu den Übungen

Übung 15.2-1 (PC, 3-7 Punkte)

Schreiben Sie selbst ein Testprogramm, dass den hier vorgestellten dynamischen Stack auf Herz und Nieren testet. Alle Methoden müssen mehrmals ausprobiert werden, und mit dem Objekt-Inspektor oder einer eigenen show()-Methode können Sie sich den Stack nach jeder Operation anschauen, ob er auch tatsächlich so aufgebaut ist, wie er theoretisch sein sollte.

3 Punkte für ein Testprogramm ohne eigene show()-Methode,

7 Punkte für ein Testprogramm mit einer eigenen show()-Methode für den Stack, die den vorhandenen Stack aber nicht verändert. Die show()-Methode darf ausschließlich über die offiziellen Stack-Operationen push(), pop(), top() und empty() auf den Stack zugreifen.

Haben Sie bemerkt, dass der im Kurs vorgestellte Stack kein einfacher int-Stack ist, sondern ein Objekt-Stack?

Sie müssen also in Ihrem BlueJ-Projekt neben der Stack-Klasse auch eine eigene Klasse definieren, die dann von der KlasseStack verwaltet wird. Ich würde Ihnen hier die Klasse Bruch vorschlagen, mit der wir uns im Verlauf des Kurses ja auch schon kurz beschäftigt haben:

public class Bruch
{
    int zaehler, nenner;
    
    public Bruch(int z, int n)
    {
        zaehler = z;        
        nenner  = n;
    }
}

Eine show()-Methode für Bruch müssten Sie aber noch selbst mit einbauen.

Nun könnten Sie Ihre Stack-Klasse mit dem Objekt-Inspektor testen. Einfacher wäre aber ein eigenes Test-Programm bzw. eine Test-Klasse. Aber diese zu programmieren ist ja Ihre eigentliche Aufgabe.

Kleiner Tipp: Mit einer Anweisung wie

s.push(new Bruch(1,2));

können Sie direkt beim Aufrufen des push()-Befehls ein neues Bruch-Objekt erzeugen. Sie müssen also nicht erst ein Bruch-Objekt erstellen und dieses dann dem push()-Befehl als Parameter übergeben, sondern können diese beiden Operationen "in einem Zug" ablaufen lassen.

Hier die "umständlichere" Alternative:

   Bruch b1 = new Bruch(1,2);
   s.push(b1);

Viel Erfolg nun beim Programmieren des Testprogramms.

Hinweise zur show()-Methode

Wenn Sie das Testprogramm mit einer eigenen show()-Methode ausstatten wollen, geht das nicht so ohne Weiteres. Denn Sie dürfen ja nur über die "offiziellen" Operationen push(), pop(), top() und empty() auf die Inhalte des Stacks zugreifen, wenn Sie diese ausgeben wollen.

Was Sie natürlich machen könnten, ist folgendes:

Sie schauen nach, welchen Wert das oberste Stack-Element hat und geben diesen Wert dann in der Konsole aus. Anschließend entfernen Sie das oberste Element mit pop() und machen dann das Gleiche mit dem nächsten Stack-Element. Das Ganze geht dann solange weiter, bis der Stack leer ist.

Damit haben Sie den Stack aber quasi vernichtet, und das ist nicht der Sinn einer show()-Methode. Bevor Sie also pop() aufrufen, sollten Sie die Stack-Elemente in einem zweiten Stack speichern. Wenn der Original-Stack dann leer ist, ist der Hilfs-Stack komplett aufgebaut und enthält alle Original-Elemente -allerdings in genau umgekehrter Reihenfolge.

Bevor Sie also die show()-Methode beenden, müssen alle Elemente aus dem Hilfs-Stack wieder zurück in den Original-Stack kopiert werden. Danach ist dann der Original-Stack in seiner ursprünglichen Reihenfolge wieder aufgebaut, und es sieht für den außenstehenden Betrachter so aus, als hättte die show()-Methode den Stack nicht manipuliert.