Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Eine Vokabelschlange. Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt.

Ähnliche Präsentationen


Präsentation zum Thema: "Eine Vokabelschlange. Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt."—  Präsentation transkript:

1 Eine Vokabelschlange

2 Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt haben, ist ein eher untypisches Beispiel. In den meisten Anwendungen sieht man nach außen hin nicht, ob intern eine Schlange verwendet wird. Das erfährt man erst, wenn man den Code genauer ansieht. Inhalt der Knoten kann alles mögliche sein: Piktogramme wie in unserem Ausgangsbeispiel, Zahlen, Zeichenketten, Wahrheitswerte, Klassen aller Art oder eben ganz konkret Vokabeln mit fremdsprachlicher und deutscher Bedeutung und ein paar Bewertungen.

3 Die Klasse Vokabel Eine Vokabel besteht aus einer fremdsprachlichen Bedeutung, einer deutschen Bedeutung, einer Punktzahl, nach der sie aufsteigend in die Schlange eingeordnet wird, und einem Wissensstand, der festlegt, wie häufig die Vokabel beim Üben wiederholt wird. public class Vokabel { private String fremd; private String deutsch; private double punkte; private double wissen; […] }

4 Die Klasse Knoten Ein Knoten hat als Inhalt eine Vokabel und als Nachfolger ein Schlangenelement (d. h. wieder einen Knoten oder den Abschluss der Schlange) public class Knoten extends Schlangenelement { private Vokabel inhalt; private Schlangenelement nachfolger; […] }

5 Die Methode gibGeringstesWissen () Klasse Schlange: public double gibGeringstesWissen () { return erstesSchlangenelement.gibGeringstesWissen (); } Klasse Schlangenelement: public abstract double gibGeringstesWissen (); Klasse Abschluss: public double gibGeringstesWissen () { return Double.POSITIVE_INFINITY; } Klasse Knoten: public double gibGeringstesWissen () { double geringstesWissenHinterMir = nachfolger.gibGeringstesWissen (); if (inhalt.gibWissen () < geringstesWissenHinterMir) { return inhalt.gibWissen (); } else { return geringstesWissenHinterMir; }

6 Die Methode gibGesamtesWissen () Klasse Schlangenelement: public abstract double gibGesamtesWissen (); Klasse Abschluss: public double gibGesamtesWissen () { return 0; } Klasse Knoten: public double gibGesamtesWissen () { return inhalt.gibWissen () + nachfolger.gibGesamtesWissen (); } Rekursive Methoden werden in der Klasse Schlangenelement einfach nur abstrakt deklariert und nicht implementiert. Wenn die Methode wie hier einen Rückgabewert hat, dann erhält dieser im Abschluss den einfachstmöglichen Wert. Der gesamte Wissensstand ab einem Knoten ist sein eigener Wissensstand plus der Wissensstand ab seinem Nachfolger.

7 Die Methode gibDurchschnittlichesWissen () Klasse Schlange: public double gibDurchschnittlichesWissen () { int schlangenLaenge = gibLaenge (); if (schlangenLaenge > 0) { return erstesSchlangenelement.gibGesamtesWissen () / schlangenLaenge; } else { return Double.POSITIVE_INFINITY; } In einer nichtleeren Schlange erhalten wir den durchschnittlichen Wissensstand, indem wir den gesamten Wissensstand durch die Länge der Schlange teilen. In einer leeren Schlange ist die einzig sinnvolle Definition des durchschnittlichen Wissens „plus unendlich“.

8 Die Methode loescheWissenUeber10000 () Klasse Schlange: public void loescheWissenUeber10000 () { erstesSchlangenelement = erstesSchlangenelement.loescheWissenUeber10000 (); } Klasse Schlangenelement: public abstract Schlangenelement loescheWissenUeber10000 (); Klasse Abschluss: public Schlangenelement loescheWissenUeber10000 () { return this; } Das neue erste Schlangenelement erhält man, indem man den Anfang der Restschlange heranzieht, die entsteht, wenn man alle Knoten mit Wissen größer als löscht. Aus dem Abschluss wird nichts gelöscht. Darum macht sich der Abschluss selbst zum (alten und) neuen Nachfolger seines Vorgängers.

9 Klasse Knoten: public Schlangenelement loescheWissenUeber10000 () { if (inhalt.gibWissen () > 10000) { return nachfolger.loescheWissenUeber10000 (); } else { nachfolger = nachfolger.loescheWissenUeber10000 (); return this; } Wir ermitteln die Restschlange, die entsteht, wenn man ab dem Nachfolger alle Knoten mit Wissen größer als löscht. Wenn der aktuelle Knoten selbst einen Wissensstand größer hat, dann löscht er sich, indem er den Anfang der Restschlange zum Nachfolger seines Vorgängers macht. Wenn er jedoch einen kleineren Wissenstand hat, dann speichert er den Anfang der Restschlange als seinen Nachfolger und macht sich selbst zum (alten und) neuen Nachfolger seines Vorgängers.

10 Die Methode fremdAlsAIListe () Klasse Schlangenelement: public abstract String fremdAlsAIListe (); Klasse Abschluss: public String fremdAlsAIListe () { return ""; } Klasse Knoten: public String fremdAlsAIListe () { return "\"" + inhalt.gibFremd () + "\"," + nachfolger.fremdAlsAIListe (); } Um eine Liste der fremdsprachlichen Bedeutungen für den App Inventor zu erzeugen, müssen wir bei jedem Knoten zuerst ein Anführungszeichen, dann seine eigene fremdsprachliche Bedeutung, dann ein Anführungszeichen und ein Komma und dann alle fremdsprachlichen Bedeutungen ab seinem Nachfolger bestimmen.

11 Klasse Schlange: public String fremdAlsAIListe () { String listeMitKommata = erstesSchlangenelement.fremdAlsAIListe (); if (listeMitKommata.equals ("")) { return "[]"; } else { return "[" + listeMitKommata.substring (0, listeMitKommata.length () - 1) + "]"; } Insgesamt bauen wir damit rekursiv eine Liste mit Kommata. Wenn die Liste leer ist, müssen wir dem App Inventor [] melden. Wenn sie nicht leer ist, müssen wir sie in eckige Klammern einschließen und das letzte Zeichen (ein überflüssiges Komma) löschen.


Herunterladen ppt "Eine Vokabelschlange. Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt."

Ähnliche Präsentationen


Google-Anzeigen