Hallo,
mir liegt folgende Aufgabe vor. Ich habe lange Zeit versucht diese Aufgabe zu machen und habe einen Code programmiert bei dem Ich gemerkt habe, dass die Konsole das ausgegeben hat was ich auch brauche. Irgendwie habe ich aber das Gefühl, dass ich etwas extrem dummes zusammengebaut habe und das gar nicht die Lösung sein kann. Es scheint einfach falsch zu sein. Könnte mir jemand sagen ob meine Code richtig ist?
Erweitern Sie die zweite Version der einfach verketteten Liste so, dass das Listenende beim Anhängen nicht immer wieder neu ermittelt werden muss, sondern neue Elemente direkt am Ende der Liste angehängt werden können. Hängen Sie zum Test mindestens 20 Elemente an.
Dazu ein paar Hilfestellungen:
• Sie müssen neben dem Anfang der Liste jetzt auch das Ende der Liste in einer Variablen speichern können.
• Erstellen Sie eine Methode, die Ihnen das aktuelle Ende der Liste zurückliefert. Alternativ können Sie sich das Listenende auch von der Methode zum Anhängen liefern lassen.
• Setzen Sie den Wert der Variablen für das Listenende nach dem Anhängen neuer Elemente jeweils auf das aktuelle Ende der Liste und rufen Sie dann die Methode zum Anhängen neuer Listenelemente mit diesem Wert neu auf.
class Listenelement{
String daten; // Eigenschaft Daten
Listenelement nachfolger,Ende; // Zwei Listenelemente
void setDaten(String datenNeu) { // Übergabe von Daten
daten = datenNeu;
}
void anhangen(String datenNeu) {
if(nachfolger == null) { // Gibt es ein weiteres Element?
Ende = nachfolger; //Wenn ja dann Ende = nächstes Element
nachfolger = new Listenelement(); // Nachfolger erzeugt neues Objekt
nachfolger.setDaten(datenNeu); // Und gibt diesem Objekt daten
}
else // Wenn es kein weiteres Element gibt
nachfolger.Listenende(); // nachfolger ist gleich Ende
System.out.println(datenNeu); // Ende erzeugt 19 Elemente
}
Listenelement Listenende() { // Methode liefert Ende zurück
return Ende;
}
void ausgabe() { // Ausgabe von daten
System.out.println(daten); // Daten = Anfang "Element 1 "
}
}
public class Liste {
public static void main(String[] args) {
Listenelement Anfang = new Listenelement(); // Erzeugung von Anfang
Anfang.setDaten("Element 1"); // Anfang 1 zuweisen
Anfang.ausgabe(); // Anfang in der Konsole ausgeben
for(int e = 2;e < 21; e++) // Schleife für die Zahlen von 2 bis 20
Anfang.anhangen("Element "+e); // Anfang werden 19 Zahlen zugefügt
}
}
mir liegt folgende Aufgabe vor. Ich habe lange Zeit versucht diese Aufgabe zu machen und habe einen Code programmiert bei dem Ich gemerkt habe, dass die Konsole das ausgegeben hat was ich auch brauche. Irgendwie habe ich aber das Gefühl, dass ich etwas extrem dummes zusammengebaut habe und das gar nicht die Lösung sein kann. Es scheint einfach falsch zu sein. Könnte mir jemand sagen ob meine Code richtig ist?
Erweitern Sie die zweite Version der einfach verketteten Liste so, dass das Listenende beim Anhängen nicht immer wieder neu ermittelt werden muss, sondern neue Elemente direkt am Ende der Liste angehängt werden können. Hängen Sie zum Test mindestens 20 Elemente an.
Dazu ein paar Hilfestellungen:
• Sie müssen neben dem Anfang der Liste jetzt auch das Ende der Liste in einer Variablen speichern können.
• Erstellen Sie eine Methode, die Ihnen das aktuelle Ende der Liste zurückliefert. Alternativ können Sie sich das Listenende auch von der Methode zum Anhängen liefern lassen.
• Setzen Sie den Wert der Variablen für das Listenende nach dem Anhängen neuer Elemente jeweils auf das aktuelle Ende der Liste und rufen Sie dann die Methode zum Anhängen neuer Listenelemente mit diesem Wert neu auf.
class Listenelement{
String daten; // Eigenschaft Daten
Listenelement nachfolger,Ende; // Zwei Listenelemente
void setDaten(String datenNeu) { // Übergabe von Daten
daten = datenNeu;
}
void anhangen(String datenNeu) {
if(nachfolger == null) { // Gibt es ein weiteres Element?
Ende = nachfolger; //Wenn ja dann Ende = nächstes Element
nachfolger = new Listenelement(); // Nachfolger erzeugt neues Objekt
nachfolger.setDaten(datenNeu); // Und gibt diesem Objekt daten
}
else // Wenn es kein weiteres Element gibt
nachfolger.Listenende(); // nachfolger ist gleich Ende
System.out.println(datenNeu); // Ende erzeugt 19 Elemente
}
Listenelement Listenende() { // Methode liefert Ende zurück
return Ende;
}
void ausgabe() { // Ausgabe von daten
System.out.println(daten); // Daten = Anfang "Element 1 "
}
}
public class Liste {
public static void main(String[] args) {
Listenelement Anfang = new Listenelement(); // Erzeugung von Anfang
Anfang.setDaten("Element 1"); // Anfang 1 zuweisen
Anfang.ausgabe(); // Anfang in der Konsole ausgeben
for(int e = 2;e < 21; e++) // Schleife für die Zahlen von 2 bis 20
Anfang.anhangen("Element "+e); // Anfang werden 19 Zahlen zugefügt
}
}