Home > Informatik > Stufe Q1 > 11. Vokabelliste

Übung 11.1-4

Die Aufgabe

Übung 11-1-4 (PC)

Schreiben Sie zwei Methoden

public void sortierenDeutsch()

public void sortierenEnglisch()

die den Array der Vokabel-Objekte nach den deutschen bzw. englischen Begriffen aufsteigend sortieren.

Lösungshinweise

Sie haben in der Folge 8 die drei primitiven Sortierverfahren kennengelernt.

Das Sortieren von int-Zahlen in einem Array ist natürlich einfacher als das Sortieren von Vokabel-Objekten. 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 den Lexikon-Eintrag über Strings und lesen Sie sich die verschiedenen Methoden, die in Frage kommen, durch.

Zum Sortieren selbst können Sie dann den einfachsten Algorithmus wählen, also den Bubblesort.

Testprogramm

public class Testklasse
{
   private Vokabelliste liste;

   public Testklasse()
   {
      liste = new Vokabelliste();

      liste.hinzufuegen("Hund","dog");
      liste.hinzufuegen("Katze","cat");
      liste.hinzufuegen("Schwein","pig");
      liste.hinzufuegen("Kuh","cow");
      liste.hinzufuegen("Ratte","rat");
      liste.hinzufuegen("Aal","eel");
      liste.hinzufuegen("Fisch","fish");
      liste.hinzufuegen("Esel","donkey");       
      liste.hinzufuegen("Affe","monkey");  
      liste.anzeigen();
      System.out.println("\nSortieren nach deutschen Begriffen...");
      liste.sortierenDeutsch();
      liste.anzeigen();
      System.out.println("\nSortieren nach englischen Begriffen...");
      liste.sortierenEnglisch();
      liste.anzeigen();
   }
}

Mit dem obigen Testprogramm können Sie die Vokabelliste testen, ohne dass Sie in der BlueJ-Umgebung ständig neue Vokabeln eintippen müssen.

Zunächst legt das Testprogramm eine neue leere Vokabelliste an, dann werden fünf Vokabeln hinzugefügt und ausgegeben. Dann erfolgt der eigentliche Test der Sortieren-Methoden.

Ein missglückter Versuch

Betrachten Sie den folgenden Versuch, die Methode sortierenDeutsch zu implementieren:

    public void sortierenDeutsch()
    {
       String d1,d2;
       
       for (int durchgang = 1; durchgang < anzahl; durchgang++)
          for (int i=0; i < anzahl-1; i++)
          {
             d1 = liste[i].gibDeutsch();
             d2 = liste[i+1].gibDeutsch();      
             if (d1.compareTo(d2) > 0)
             {
                liste[i].setzeDeutsch(d2);   
                liste[i+1].setzeDeutsch(d1);   
             }
          }
    }

Hier wurde offensichtlich der Bubblesort angewandt, und mit Hilfe des compareTo()-Befehls werden die beiden benachbarten Array-Elemente der Liste verglichen. Ist das linke Element größer als das rechte Element, so werden die beiden Elemente vertauscht. Dazu musste die Klasse Vokabel um eine manipulierende Methode setzeDeutsch ergänzt werden, da ja wegen der Datenkapselung nicht direkt auf das Deutsch-Attribut zugegriffen werden kann.

Die Methode sortierenEnglisch wurde entsprechend programmiert.

Schauen Sie sich nun an, welche Ergebnisse das Testprogramm liefert:

Hund    // 	dog
Katze   // 	cat
Schwein // 	pig
Kuh     // 	cow
Ratte   // 	rat
Sortieren nach deutschen Begriffen...
Hund    // 	dog
Katze   // 	cat
Kuh     // 	pig
Ratte   // 	cow
Schwein // 	rat
Sortieren nach englischen Begriffen...
Hund    // 	cat
Katze   // 	cow
Kuh     // 	dog
Ratte   // 	pig
Schwein // 	rat

Irgendwas stimmt hier nicht. Nach dem Aufruf von sortierenDeutsch sind die Begriffe zwar korrekt sortiert, aber die Übersetzungen sind durcheinander gekommen. Die Kuh ist jetzt ein pig, und die Ratte eine cow?

Überlegen Sie, was bei der obigen Implementation schief gelaufen ist, und machen Sie es besser!