Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz

Siero

Mitglied
Moin, ich lerne gerade Java in form einer Berufsweiterbildung.
Ich sollte den Programmcode so umändern das der beim anhängen von neuen Elementen direkt über eine Variable das Ende der Kette gegeben wird, sodass dann direkt das neue Element dran gehangen werden kann. Jedoch habe ich bei der Ausgabe das Problem, das nur die Daten des 1. und des letzten Elements ausgegeben werden. Hoffe jemand sieht was ich falsch gemacht habe.

Mein Code:

class Listenelement{
String daten;
Listenelement naechster;
Listenelement letzter;

void setDaten(String datenNeu) {
daten = datenNeu;
naechster = null;
}

void anhaengen(String datenNeu) {
naechster = letzter;
naechster = new Listenelement();
naechster.setDaten(datenNeu);
letzter = naechster;
//naechster = listenAnfang;
System.out.println("Daten " + datenNeu + " wurden Eingefügt.");
System.out.println("naechster " + naechster);
System.out.println("Listenende " + letzter);
}

void ausgeben() {
System.out.println(daten);
if(naechster != null) {
//System.out.println("Ausgeben naechster " + naechster);
//System.out.println("Ausgeben Daten " + daten);
naechster.ausgeben();
}
}
}
public class Verkettete_Listen{
public static void main(String[] args) {
Listenelement listenAnfang = new Listenelement();
listenAnfang.setDaten("Element 1");

for(int element = 2; element <20; element++)
listenAnfang.anhaengen("Element " + element);

listenAnfang.ausgeben();
}
}
 
a) Code bitte immer in Code-Tags

b) Es fallen paar Dinge auf:

b1) setDaten setzt auch naechster. Also wenn ich Dir sage, dass Du Dir ein leeres Blatt aus dem Druckerfach nehmen kannst, dann bedeutet das, dass Du dir ein leeres Blatt Papier aus dem Vorrat des Druckers nehmen kannst. Du nimmst nicht die Tonerkatusche raus. Du nimmst auch nicht das Netzwerkkabel weg oder so ... Und bei setDaten bedeutet das: Du setzt daten. Du setzt nicht naechster! Das wird da halt nicht erwartet.

b2) anhaengen - Die Methode ist so komplett Quatsch (aus meiner Sicht!)

Mal es dir am Besten auf. Überlege genau, was Du wo wie speichern willst. (Das ist eh etwas, das man überdenken sollte. Das macht so nicht ganz so viel Sinn, denn die Instanzvariable letzter wird nur im ersten Element sinnvoll genutzt. Also eine Ungenutzte Instanzvariable in allen Elementen ... aber egal - das funktioniert und wir wollen nichts optimieren!)

Und dann male es genau auf - Mit Stift und Papier kannst Du es gut aufzeichen. Wenn Du ein erstes Element E1 hast: Wie müssen da naechster und letzter gesetzt sein?
Wenn nun ein Element E2 dahinter kommt: Wie muss es dann gesetzt sein?
Und da kommt dann noch ein Element E3 dazu - was wird dann gesetzt?

Das musst Du
  • Mit Stift und Papier durchgehen!
  • Dann genau notieren, was Du machst
Erst dann kannst Du die Methode auch richtig schreiben.
 

Neue Themen


Zurück
Oben