Zielsetzung
Unsere Vokabelliste kann jetzt beliebig viele Vokabeln speichern, und wir können die Vokabeln in der Konsole anzeigen lassen - in der Reihenfolge, wie sie eingegeben wurden.
Eine alphabetisch geordnete Ausgabe der Vokabeln oder das Suchen nach einer Übersetzung ist aber noch nicht implementiert. Diese beiden Aufgaben wollen wir uns in diesem Abschnitt der Folge 11 vornehmen.
Kleine Ergänzungen
Bevor wir mit dem Sortieren und Suchen beginnen, wollen wir erst mal ein paar kleine Verbesserungen einführen. Betrachten Sie dazu folgenden Quelltext-Ausschnitt aus der Klasse Vokabelliste:
public void hinzufuegen(Vokabel v)
{
liste.add(v);
}
public void hinzufuegen(String deutsch, String englisch)
{
Vokabel vok = new Vokabel(deutsch,englisch);
liste.add(vok);
}
Die Methode hinzufuegen(Vokabel v) wurde durch eine zweite Methode gleichen Namens ergänzt. Der zweiten Methode wird kein Parameter vom Typ Vokabel übergeben, sondern zwei Parameter vom Typ String.
Der korrekte Fachbegriff für die Tatsache, dass zwei Methoden den gleichen Namen haben können, ist übrigens Methodenüberlagerung (englisch: Method Overloading).
Methodenüberladung
Von einer Methodenüberladung spricht man in Java, wenn innerhalb einer Klasse mehrere Methoden denselben Namen besitzen, sich aber in ihrer Parameterliste unterscheiden.
Dabei können sich unterscheiden:
- Die Anzahl der Parameter
- Die Datentypen der Parameter
- die Reihenfolge der Parametertypen
Beim Übersetzen des Codes erkennt der Java-Compiler automatisch anhand der Parameterliste, welche der gleichnamigen Methoden aufgerufen werden soll.
Für Experten oder Studierende:
Die Methodenüberladung (Overloading) darf nicht mit der Methodenüberschreibung (Overriding) verwechselt werden. Beim Overriding definiert eine Unterklasse eine geerbte Methode mit derselben Signatur (also der selben Parameterliste) neu.
Die zweite hinzufuegen()-Methode erlaubt es uns jetzt, das Hinzufügen neuer Vokabeln etwas einfacher zu gestalten, wie der folgende Ausschnitt aus dem Quelltext der Testklasse zeigt:
public void fuegeVokabelnEin()
{
testliste.hinzufuegen(new Vokabel("Hund","dog"));
testliste.hinzufuegen(new Vokabel("Katze","cat"));
testliste.hinzufuegen(new Vokabel("Esel","donkey"));
testliste.hinzufuegen(new Vokabel("Kuh","cow"));
testliste.hinzufuegen(new Vokabel("Schwein","pig"));
testliste.hinzufuegen("Maus","mouse");
testliste.hinzufuegen("Vogel","bird");
testliste.hinzufuegen("Löwe","lion");
}
Die ersten fünf Anweisungen benutzen die erste hinzufuegen()-Methode mit dem Vokabel-Parameter, die letzten drei Anweisungen benutzen die zweite hinzufuegen()-Methode mit den zwei String-Parametern. Der Code der drei letzten Anweisungen ist wesentlich leichter zu lesen und zu verstehen.
Übungen
Übung 11.2-1
Implementieren Sie in der Klasse Vokabelliste eine Methode
public String getDeutsch(String englisch)
welche die gesamte Vokabelliste durchsucht und dabei für jeden Eintrag den Parameter englisch mit dem Rückgabewert von Vokabel.getEnglisch() vergleicht.
Wenn eine Übereinstimmung gefunden wurde - dazu String.equals() benutzen - wird die Methode beendet und dabei das deutsche Wort zurückgegeben.
Wenn die gesamte Liste durchsucht wurde und das Wort dabei nicht gefunden wurde, soll eine entsprechende Fehlermeldung als String zurückgeliefert werden, beispielsweise "Das gesuchte Wort wurde nicht gefunden".
Die Fehlermeldung darf auf gar keinen Fall von der Methode direkt in die Konsole geschrieben werden, sondern muss als String zurückgegeben werden, damit die Klasse Vokabelliste auch von graphischen Java-Anwendungen benutzt werden kann.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu
Übung 11.2-2 (Experten, Studenten)
Implementieren Sie in der Klasse Vokabelliste eine Methode
public void sortiereDeutsch()
welche die Vokabelliste aufsteigend sortiert, und zwar nach den deutschen Begriffen. Implementieren Sie dazu einen Bubblesort.
Die folgende Methode zeigt Ihnen, wie man die ArrayList-Methode set() korrekt benutzt:
private void tauschen(int i)
{
if (i >= 0 && i < liste.size()-1)
{
Vokabel temp = liste.get(i);
liste.set(i,liste.get(i+1));
liste.set(i+1,temp);
}
}
Diese tauschen()-Methode können Sie dann für Ihren Bubblesort benutzen.
Lösungsvorschlag auf den Seiten für Lehrer(innen) / Nähere Infos dazu