www.r-krell.de |
Webangebot für Schule und Unterricht, Software, Fotovoltaik und mehr |
Willkommen/Übersicht > Informatik > Informatik mit Java, Teil e) > LinADT-Test
Testprogramm für die (alten)
linearen abstrakten Datentypen
Keller und Schlange (für bel. Objekte)
Bedienungsanleitung:
Erst muss
eine Speicherstruktur gewählt werden,
bevor Daten eingegeben werden können!
Bei
diesen alten Speichern können Daten verschiedener Typen
(hier Zahlen, Buchstaben oder Texte) bunt gemischt
im selben Speicher verwaltet werden.
Bei 'rein:Zahl' kann eine Ganzzahlen oder Dezimalzahl
(aber nur mit Punkt statt Komma) eingegeben werden,
bei 'rein: Zchn' kann jeweils ein einzelnes Schriftzeichen
(Buchstabe)
und bei 'rein: Text' auch ein längerer Text eingeben
werden.
Vermeiden Sie den Druck auf die
(unbelegt)-Taste, die eigentlich noch
ohne Funktion ist, aber den Zugriff auf den bereits
gefüllten Speicher ruiniert.
Sie müssen anschließend erst wieder einen neuen,
leeren Speicher anlegen!
Bitte speichern Sie zunächst die
Programmdatei
Keller&Schlange_alt (r-krell.de).jar (23 kB) |
auf Ihrem Computer und starten ("öffnen")
Sie dann die herunter geladene Datei durch Anklicken.
Am besten schieben Sie danach das geöffnete Programmfenster
nach oben links,
sodass Sie gleichzeitig diese Seite lesen können.
Mehr zum Start von Java-Programmen als Application (und nicht mehr als Applet) auf meiner Extraseite Übersicht über meine Java-Programme - Appletprobleme und Downloads (erscheint in neuem Browser-Tab)
Wie auf der Seite e) berichtet, stelle ich den Schülerinnen und Schülern in meinem Unterricht eine Oberfläche zur Verfügung, in der sie die selbstgeschriebenen Implementationen der verschiedenen Speicherstrukturen testen können.
Natürlich verhalten sich verschiedenen
Kellerrealisationen völlig gleich und können jetzt hier
im Test an der Funktion/Ausgabe nicht unterschieden werden.
Keller (auch stacks genannt) sind eben LIFO-Speicher
(last in - first out): Die gespeicherten Elemente kommen in
umgekehrter Reihenfolge wieder raus, das zuletzt mit
rein gespeicherte Element, das immer auch mit
zeige angesehen werden kann, zuerst.
Die Schlangen (auch als Warteschlangen oder als queues
bezeichnet), die auch auf unterschiedliche Weise realisiert
werden können und deren Funktionsfähigkeit hier
getestet werden kann, sind hingegen LIFO-Speicher (first in -
first out): Das zuerst mit rein gespeicherte Element
steht vorne, wird mit zeige gezeigt und kann mit
raus entfernt werden. rein fügt die
Elemente hinten an.
Da die Datenstrukturen jeweils allgemein für nicht näher spezifizierte Objekte ausgelegt wurden, kann man verschiedene Wrapper-Klassen wählen, von denen passende Objekte gebildet werden. Dadurch werden in Wirklichkeit einheitlich Objekte gespeichert bzw. verwaltet, wobei jedes Objekt mit einem Datum eines anderen Typs Typs gefüllt sein kann. Das macht die Speicher universell verwendbar. Aber Achtung: Das widerspricht dem Java-Konzept der Typsicherheit. Inzwischen sollte man lieber parametrisierte Keller oder Schlangen wählen, um Typprüfungen zu erlauben - vgl. meine Java-Seite e) bzw. das Java-Programm mit Speichern für jeweils nur einen, vorher festzulegenden eindeutigen Typ auf meiner Seite if-e-appliste.htm.
Hier befinden sich im Programmtext der Oberfläche
Programmzeilen für die Auswahl von den drei beispielhaft
erlaubten Datentypen für die Einbettung jeweils in ein
Objekt:
// Bei der Eingabe wird je nach Knopfdruck ein Objekttyp gewählt: String ein = tfEingabe.getText(); Object Obj = null; switch (objekttyp) //je nach Knopfdruck enthält diese Variable einen der 3 konstanten Werte { case ALS_ZAHL : try { Obj = new Double (ein); //Wrapper-Objekt für Kommazahlen break; } catch (Exception nf) { ausgabe.append ("** "+ein+" keine gültige Zahl -- neu eingeben!\n"); return; } case ALS_ZEICHEN : Obj = new Character (ein.charAt(0)); break; //Wrapper-Objekt für Schriftzeichen case ALS_ZKETTE : Obj = ein; //String ist bereits ein Objekttyp } datenstruktur.rein (Obj); |
// Identifikation eines Objekts bei der Ausgabe: Java erkennt Objekttypen mit instanceof Object Obj = datenstruktur.raus(); if (Obj instanceof Double) { aus = "Zahl "+Obj; //hier und im Folgenden wird ausgenutzt, dass Java bei ".."+... implizit } //Objekte in Textform umwandelt -- wie explizit bei ".."+Obj.toString(); else if (Obj instanceof Character) { aus = "Zeichen '"+Obj+"'"; } else if (Obj instanceof String) { aus = "Zeichenkette \""+Obj+"\""; } ausgabe.append (aus+" entfernt!\n"); |
zurück zur Seite
„Informatik mit Java, Teil e)"