|
|
|||||
Folge 11 - Eine VokabellisteTeil 1 |
|||||
Schritt 1Wir wollen nun ein BlueJ-Programm schreiben, das Ihnen beim Vokabellernen helfen soll. Zunächst einmal benötigen wir eine Klasse Vokabel, deren Objekte dann in einer ArrayList gespeichert werden. Die Abbildung 1 zeigt eine solche Klasse, allerdings in einer Minimalversion, die außer dem Konstruktor und einer Methode zum Anzeigen der Vokabel nichts enthält.
1 Die Klasse Vokabel ist schnell progammiert. Lassen Sie den Mauszeiger einige Sekunden über dem Quelltext stehen, dann erhalten Sie weitere Informationen. Achten Sie bitte darauf, dass die beiden Attribute deutsch und englisch als private deklariert wurden! Es ist daher nicht möglich, direkt auf den Inhalt der Attribute zuzugreifen. Wollen Sie den Wert der Attribute auslesen oder verändern, so müssen Sie dazu spezielle sondierende Methoden für die Klasse Vokabel schreiben, z.B. public String gibDeutsch(). |
Klasse ArrayList
In der Folge 9 des 11er Kurses haben wir uns mit Arraylisten beschäftigt. Wenn Sie mehr über Arraylisten lesen wollen, sollten Sie sich die Folge 9 im Schnelldurchgang anschauen. |
||||
Schritt 2Wir erzeugen jetzt eine Klasse VokabelListe, deren Minimalversion so aussehen kann wie in Abb. 2 gezeigt. |
|||||
Schritt 3 / Übung 11.1 (2 + 1 Punkte)Erweitern Sie die Klasse VokabelListe um folgende Methoden:public void hinzufuegen(String deutsch, String englisch); public void hinzufuegen(Vokabel neu); Sie haben richtig gelesen, Sie sollen zwei hinzufuegen()-Methoden programmieren, eine mit zwei String-Parametern und eine mit einem Vokabel-Parameter. Sollten Sie sich mit dem Overloading von Methoden nicht auskennen, lesen Sie bitte die Theorieseite dazu. Hinweise: Sie müssen selbst schon herausfinden, wie man Objekte zu einer ArrayList hinzufügt. Da die Parameter deutsch und englisch keine Objekte sind, müssen Sie bei dieser Variante der Methode hinzufuegen() zu einem Trick greifen: Innerhalb von hinzufuegen() erzeugen Sie ein neues leeres Objekt der Klasse Vokabel. Dem Konstruktor von Vokabel übergeben Sie die beiden String-Parameter - und schon haben Sie ein Objekt, das sie der ArrayList hinzufügen können. |
Für die Seiten benötigen Sie einen Benutzernamen und ein Passwort. Lehrer und Lehrerinnen anderer Schulen können sich die Zugangsdaten holen, indem Sie mir eine EMail schreiben und dort ihre Schuladresse mitteilen, z.B. in der Form: Herr Ulrich Helmich Ich schicke dann einen Brief mit dem Passwort an die Schuladresse. |
||||
Schritt 4 / Übung 11.2 (2 Punkte)Schreiben Sie eine Methode VokabelListe.anzeigen(), die alle in der Liste gespeicherten Vokabeln anzeigt.Die vollen zwei Punkte erhalten Sie nur dann, wenn der Quelltext Ihrer Methode nicht unnötig lang ist. Leider kann Ihnen an dieser Stelle noch nicht verraten werden, was unter "unnötig lang" zu verstehen ist, da Ihnen dann bereits ein Teil der Lösung bekannt wäre. |
Klausuraufgabe zum Thema ArrayList (November 2005) Lösungen dazu. |
||||
Schritt 5Wir wollen jetzt eine Funktion zum Suchen einer Übersetzung programmieren. Gegeben ist der deutsche Begriff, gesucht wird die englische Übersetzung.Prinzipielles Vorgehen
ImplementierungEingeben des deutschen BegriffsHier können wir dank BlueJ sehr einfach verfahren: Wir implementieren den deutschen Begriff als Parameter der Suchfunktion: public void sucheEnglisch(String suchwort); Suchen des englischen BegriffsWir müssen vorne in der Arrayliste mit der Suche anfangen und im ungünstigsten Fall bis zum Ende der Liste weitersuchen. Hier würde sich eine while-Schleife anbieten, die wir verlassen können, wenn das Suchwort gefunden wurde. int i = 0;
boolean gefunden = false;
while (!gefunden)
{
Vokabel vok = (Vokabel) liste.get(i);
if (vok.deutsch == suchwort)
{
gefunden = true;
System.out.println
("Übersetzung: "+ vok.englisch);
}
else i++;
}
Was Sie hier sehen, ist der 08/15-Versuch einer Implementierung des Suchens. Leider enthält diese Version noch mindestens drei teils gravierende Fehler. Aber zumindest haben Sie jetzt eine Vorstellung davon, wie man die Suche implementieren könnte. Da die folgende Übung nicht ganz einfach ist, wird die erfolgreiche Lösung auch mit sage und schreibe 8 Punkten honoriert! |
|||||
Übung 11.3 (8 Punkte)a) Finden und dokumentieren Sie alle Fehler in dem obigen Quelltext.b) Implementieren Sie eine fehlerfreie und funktionstüchtige Suchfunktion! Beachten Sie dabei streng das Prinzip der Datenkapselung! Außerdem sollten Sie sich noch mal alle wichtigen Methoden der Klasse ArrayList anschauen. Vielleicht finden Sie ja etwas Brauchbares. Ferner sollten Sie sich im Internet (am besten auf den Sun-Seiten) über die Klasse String informieren und vor allem die Frage klären, wie man zwei Strings miteinander vergleichen kann.
3 Die Klasse Tester In der Abbildung 3 sehen Sie, wie man BlueJ-Projekte in Ruhe testen kann. Schreiben Sie sich einfach eine Klasse Tester, welche nicht anderes macht, als die eigentlichen Klassen zu testen. Im Konstruktor von Tester werden mehrere Vokabeln der Vokabelliste hinzugefügt, dabei werden beide hinzufuegen()-Methoden getestet. Anschließend wird die anzeigen()-Methode getestet. Sie müssten diese Tester-Klasse jetzt um Tests der Suchen-Funktion erweitern. |
Dringend empfohlen für Übung 11.3:
|
||||
Schritt 6An der anzeigen()-Methode stört etwas sehr stark: Die Vokabeln werden so angezeigt, wie sie eingegeben wurden. Völlig ungeordnet also.Übung 11.4 (8 Punkte)Ändern Sie dies, indem Sie zwei Methoden public void sortierenDeutsch() public void sortierenEnglisch() schreiben, welche die ArrayList nach den deutschen bzw. englischen Begriffen aufsteigend (a..z) sortieren. Sie haben in der Folge 10 die drei primitiven Sortierverfahren kennengelernt. Das Sortieren von Zahlen in einem Array ist natürlich einfacher als das Sortieren von Vokabeln in einer Arrayliste, darum erhalten Sie ja auch die enorme Zahl von 8 Punkten, wenn Sie es trotzdem schaffen. Sie müssen sich vorher intensiv mit der Klasse String auseinandersetzen, vor allem mit der Frage, wie kann man zwei Strings vergleichen? Wie bekommt man heraus, welcher String "kleiner" und welcher "größer" ist? Gehen Sie dazu auf die Sun-Webseite über Strings und lesen Sie sich die verschiedenen Methoden, die in Frage kommen, durch. Außerdem müssen Sie sich noch einmal intensiv mit der Klasse ArrayList auseinandersetzen. Schließlich handelt es sich nicht um einen einfachen Array; das Vertauschen von zwei Elementen einer ArrayList lässt sich implementieren, ist aber nicht ganz trivial! |
Hinweis: |
||||
und weiter mit Teil 2 |
|||||
|
Diese HTML-Seite wurde erstellt von Ulrich Helmich am 18. Juni 2005 mit Golive 6. |
|||||