Anzeige

Methode erklären

#1
In der Aufgabe geht es um ein Programm, mittels einer Hashtabelle der Index von Kfz-Kennzeichen ermittelt werden soll und in einer Liste gespeichert werden soll.

Dabei gab es folgende Methode
Code:
public void loesche(String KfzKennzeichen) {
int Index = berechneIndex(KfzKennzeichen);
if (meineTabelle[Index] != null) {
    Element einElement = meineTabelle[Index];
if(einElement.getKfzKennzeichen().equals(KfzKennzeichen)){
      meineTabelle[Index] = einElement.getNaechstesElement();
    }
else
 {
      Element Vorgaenger = einElement;
      einElement = einElement.getNaechstesElement();
while(einElement != null && !einElement.getKfzKennzeichen().equals(KfzKennzeichen))
      {
        Vorgaenger = einElement;
        einElement = einElement.getNaechstesElement();
      }
if(einElement != null) {
        Vorgaenger.setNaechstesElement
                           (einElement.getNaechstesElement());
      }
    }
  }
}
Kann mir jemand die Methode löschen einfach mla Zeile für Zeile erklären?
Ich verstehe grob, wie es funktioniert. Aber eben nur grob...
Hoffe jemand hier kann mir helfen
 

HonniCilest

Erfahrenes Mitglied
#2
Ich verstehe grundsätzlich die Operationen, aber um ehrlich zu sein fällt es mir auch schwer zu verstehen was dahinter steckt. Zum einen gibt es ein Array, zum anderen aber nächste und Vorgängerelemente. Letzteres ist eher typisch für verkettete Listen. Es ist diese Mischung aus beiden, welche ich ohne den Rest des Programmes nicht wirklich verstehe.
 

Technipion

Erfahrenes Mitglied
#3
Hallo LegendaryBeazt,
zunächst mal: Der Code sieht katastrophal aus. Total unnötig kompliziert und unleserlich geschrieben. Nicht einmal die Einrückungen stimmen...

Kann mir jemand die Methode löschen einfach mla Zeile für Zeile erklären?
Ich verstehe grob, wie es funktioniert. Aber eben nur grob...
Sowas wirkt hier im Forum immer etwas betrügerisch. Das klingt als müssten wir dir helfen irgendeine Hausaufgabe oder ähnliches zu verstehen. Vor allem weil du schreibst, dass du den Code grob verstehst, dann aber keinerlei Bezug auf das nimmst, was du ja schon verstanden hast. Es ist viel einfacher dir zu helfen wenn wir wissen, wo genau du Unklarheiten hast. Also in Zukunft bitte immer gleich mitposten welche Stellen dir klar sind, und die unklaren Stellen/Zeilen/Funktionen genau hervorheben.

Zur Funktion: Sie löscht ein KFZ-Kennzeichen aus einer Hashtabelle. Hier ein kleines Schema, wie Hashtabellen funktionieren:
Hashtabelle.png
Aus dem Kennzeichen kann über eine Funktion berechneIndex(...) eine Hashadresse berechnet werden. Unter jeder Hashadresse existiert in der Hashtabelle eine verkettete Liste. Zunächst sind alle Listen einfach leer, bis sie dann nach und nach mit Elementen gefüllt werden. In deiner Liste sind wohl schon Elemente enthalten.

Die Funktion ermittelt zunächst die Hashadresse des übergebenen Kennzeichens. Falls die Liste dort nicht leer ist wird geprüft, ob das erste Element in der entsprechenden Liste dein Kennzeichen ist.
Falls ja: L1 wird gelöscht und mit dem nächsten Element ersetzt (das kann auch \0 sein, die Liste ist dann also wieder leer).
Falls nein: Es wird eine while-Schleife benutzt um so lange die Liste durchzulaufen, bis entweder dein Kennzeichen gefunden ist oder \0 (das Ende) erreicht wird. Die while-Schleife stoppt dann.
Nach der while-Schleife wird geprüft, ob sie auf \0 stehen geblieben ist. Wenn ja existiert das Kennzeichen nicht in der Liste und es wird terminiert. Falls das aktuelle Element nicht \0 ist, muss es rein logisch dein Kennzeichen sein. In dem Fall wird das Element hinter dir an den Vorgänger gehängt, das aktuelle Element wird quasi entfernt. Bleibt die while-Schleife z.B. auf L3 stehen, würde hier L2 mit L4 verknüpft.

Unterm Strich wird damit das übergebene Kennzeichen aus der Tabelle entfernt - falls es vorhanden ist.

Gibt es noch irgendwelche Unklarheiten?

Gruß Technipion
 
Anzeige
Anzeige