verkettete Liste

XlabX

Mitglied
Hallo Leute,
ich habe versuche in eine bestehende Liste (TestListe) eine Zahl an der Stelle n einzufügen. Nur leider bekomme ich immer eine komplett leere Liste ausgegeben.
Vielleicht weiß einer von euch was ich falsch gemacht habe?

Java:
public class IntElem {
	
	private int value;
	private IntElem next;
	private IntElem previous;
	
	IntElem () {}
	
	IntElem (int newValue) {
		setValue(newValue);
	}
	
	public void setValue(int newValue) {
		value = newValue;
	}
	
	public int getValue() {
		return value;
	}
	
	public void setNext(IntElem nextElem) {
		next = nextElem;
	}
	
	public IntElem getNext() {
		return next;
	}
	
	public void setPrevious (IntElem previousElem) {
		previous = previousElem;
	}
	
	public IntElem getPrevious() {
		return previous;
	}

}

Java:
public class Liste {
	
	private IntElem start;
	
	
	public Liste () {}
	
	public Liste (IntElem x, IntElem y, IntElem z) {}
	
	public void insert(IntElem toInsert, int n) {
		IntElem pos = start;
		int i = 1;
		while (i != n) {
			if (i != n) {
				pos = pos.getNext();
				i++;
			}
			else {
				toInsert.setNext(pos.getNext());
				pos.setNext(toInsert);
			}
		}
	}
	
	public String toString() {
		String output = "";
		for (IntElem pos = start; pos != null; pos = pos.getNext()) {
			output = output + pos.getValue() + " ";
		}
	  return output;
	}
		
}

Java:
import javax.swing.JOptionPane;
class ListeCheck {
	
	public static void main(String[] args) {
		IntElem eins = new IntElem(20);
		IntElem zwei = new IntElem(30);
		IntElem drei = new IntElem(40);
		IntElem einfuegen = new IntElem (3);
		Liste TestListe = new Liste(eins, zwei, drei);
		
		TestListe.insert(einfuegen, 2);
	JOptionPane.showMessageDialog(null, TestListe.toString());
	}
}

In meiner Klasse IntElem befinden sich noch Methoden die ich zum jetzigen Zeitpunkt noch nicht brauche, erst im späteren Verlauf der Aufgabe ;-)
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> Nur leider bekomme ich immer eine komplett leere Liste ausgegeben.
gar nicht wahr, es kommt doch zu einer NullPointerException,

ist in diesem Fall auch recht einfach nachzuvollziehen, keine Vorstellung dazu?
der Konstruktor mit den drei Elementen macht gar nichts, start bleibt null,
dann kommt insert(), auf start wird alsbald next() aufgerufen -> NullPointerException
 

KrokoDiehl

Top Contributor
Hallo.
Hier gibt es mindestens zwei Probleme:
- Deine Liste ist leer, weil du den Konstruktor mit drei IntElems nicht implementiert hast (Zeile 8 im zweiten Codeblock), d.h. egal welche Elemente du übergibts, in die Liste kommen sie nicht.
- Es fehlt jegliche null-Behandlung. Am Anfang hast du eine leere Liste, d.h.
Code:
start
ist null und das wird nicht abgefangen. Ebensowenig beim iterieren, denn
Code:
getNext()
kann auch null zurückliefern.

Generell ist der Ansatz einer verketteten Liste und einer Methode
Code:
insert()
mit Index erstmal schwer. Was passiert wenn deine Leiste die Größe 4 hat und du am Index 8 einfügen willst? Über solche Fälle muss man sich dann Gedanken machen (zB IndexOutOfBoundsException werfen).
Ich rate dir, erstmal mit Methoden wie
Code:
add()
anzufangen, die einfach hinten an die Liste anfügen.
 

XlabX

Mitglied
Ja stimmt das mit dem Konstruktor es mir jetz gar nicht aufgefallen. Ich würde auch lieber mit methoden wie add usw. anfangen nur leider ist in meiner aufgabestellung die einsetzung a. d. stelle n verlang :( naja ich versuchs einfach nochmal neu, hab ich da glaub ziehmlich festgefahren, aber trotzdem danke ;-)
 
S

SlaterB

Gast
du kannst auch unabhängig von der Aufgabenstellung erstmal add() üben, dafür hast du einen freien Kopf,
dass am Ende insert() funktionieren muss bleibt ungenommen, machst du danach eben, add() später streichen wenn nötig
 

XlabX

Mitglied
so also ich hab den quellcode jetz soweit modifiziert das alles läuft, die liste ordnungsgemäß angezeigt wird und das es auch möglich ist, das er werte in die liste hinzufügt. mein einziges problem was ich jetz noch habe ist, dass er dies nur macht wenn es am anfang einfügt werden. demzufolge habe ich dann noch einen kleinen fehler in der klasse liste da mir mir wenn er es an position 2 oder weiter einfügen soll lediglich die standartliste wieder gibt. Vielleicht sieht einer von euch das problem?

Java:
public class IntElem {
	
	private int value;
	private IntElem next;
	private IntElem previous;
	
	public IntElem () {}
	
	public IntElem (int newValue) {
		setValue(newValue);
	}
	
	public void setValue(int newValue) {
		value = newValue;
	}
	public int getValue() {
		return value;
	}
	
	public void setNext(IntElem nextElem) {
		next = nextElem;
	}
	public IntElem getNext() {
		return next;
	}
	public void setPrevious (IntElem previousElem) {
		previous = previousElem;
	}
	public IntElem getPrevious() {
		return previous;
	}
}

Java:
public class Liste {
	private IntElem start, ende;
	
	public Liste() {}
	
	public Liste(IntElem x, IntElem y, IntElem z) {setStart(x); setEnde(y); start.setNext(y); y.setNext(z);}
		
	public void setStart(IntElem x) {start = x;}
	public void setEnde(IntElem z) {ende = z;}
	public IntElem getStart() {return start;}
	public IntElem getEnde() {return ende;}
	
	public void insert(IntElem toInsert, int n) {
		if (n == 1) { 
			start.setPrevious(toInsert); 
			toInsert.setNext(start);
			toInsert.setPrevious(null);
			start = toInsert;
		}
		else {
			IntElem pos = start;
			int i = 1;
			while (i == n) {
				if (i == (n-1)) {
					pos.getNext().setPrevious(toInsert);
					toInsert.setNext(pos.getNext());
					toInsert.setPrevious(pos);
					pos.setNext(toInsert);
				}
				else {pos = pos.getNext(); i++;}
			}
		}
	}
	public String toString() {
		String output = "";
		for (IntElem pos = start; pos != null; pos = pos.getNext()) {
			output = output + pos.getValue() + " ";
		}
	 return output;
	}
}

Java:
import javax.swing.JOptionPane;
class ListeCheck {
	
	public static void main(String[] args) {
		IntElem a = new IntElem(10);
		IntElem b = new IntElem(20);
		IntElem c = new IntElem(30);
		Liste TestListe = new Liste(a,b,c);
		IntElem einfuegen = new IntElem (15);
		
		TestListe.insert(einfuegen,2);
		
	JOptionPane.showMessageDialog(null, TestListe.toString());
	}
}
 
S

SlaterB

Gast
was ist denn eine 'Standardliste'? 20 30 40?
stimmt, die wird bei deinem Programm ausgegeben, eben weil insert noch nicht allzu doll ist,

was insert macht ist im Grunde so einfach dass du es selber nachvollziehen könntest,
ich mache es nun zum zweiten Mal, und da überlege ich jetzt schon ob sich das überhaupt lohnt,

n ist also 2,
-> if (n == 1) { ist nicht erfüllt, es kommt zum else,
-> dort steht Schleife while(n == 1), die wird nie ausgeführt, für n == 2 sowieso nicht, für n == 1 auch nicht weil dann das erste if dran käme

war das schwer?
selbst wenn du es nicht im Kopf direkt durchlaufen kannst, helfen System.out.println()-Ausgaben um jeden einzelnen Programmschritt ganz leicht zu protokollieren

bisher macht die Methode also nicht viel sinnvolles, und dass eine Standardfüllung von 3 Elementen da ist solltest du auch nicht voraussetzen,
start könnte in dieser Methode null/ leer sein, jeden möglichen Fall bedenken und bearbeiten
 
S

SlaterB

Gast
zunächst brauchst du ein Konzept für diese Methode, z.B. in deutscher Sprache,
was hast du insgesamt vor, was soll speziell diese Schleife leisten?

und wenn ich schon sage, dass diese eine Schleifenbedingung (im Moment) die langweiligste ist,
dann wäre z.B. schon das Gegenteil while (i != n) besser, was du übrigens im ersten Post auch hattest (warum jetzt nicht mehr?)

richtig ins Detail gehen will ich vorerst wie gesagt nicht, das ist ja genau deine Aufgabe,
wenn du abschreiben willst finden sich im Netz bestimmt diverse 'verkettete Listen'
 

XlabX

Mitglied
so gehts ;-)

Java:
public class Liste {
	private IntElem start, ende;
	
	public Liste() {}
	
	public Liste(IntElem x, IntElem y, IntElem z) {setStart(x); setEnde(y); start.setNext(y); 
				 y.setNext(z); z.setPrevious(y); y.setPrevious(start);}
		
	public void setStart(IntElem x) {start = x;}
	public void setEnde(IntElem z) {ende = z;}
	public IntElem getStart() {return start;}
	public IntElem getEnde() {return ende;}
	
	public void insert(IntElem toInsert, int n) {
		if (n == 1) { 
			start.setPrevious(toInsert); 
			toInsert.setNext(start);
			toInsert.setPrevious(null);
			start = toInsert;
		}
		else {
			IntElem pos = start;
			int i = 1;
			while (i != n) { 
				if (i == (n-1)) {
					pos.getNext().setPrevious(toInsert);
					toInsert.setNext(pos.getNext());
					toInsert.setPrevious(pos);
					pos.setNext(toInsert);
					i++;
				}
				else {pos = pos.getNext(); i++;}
			}
		}	
	}
	
	public String toString() {
		String output = "";
		for (IntElem pos = start; pos != null; pos = pos.getNext()) {
			output = output + pos.getValue() + " ";
		}
	 return output;
	}
}
 

XlabX

Mitglied
also ich hätte noch eine letzte Frage bzgl dieser liste, und zwar würde mich interessieren warum ich an jeder beliebigen stelle ein element einsetzen kann außer an der letzten position?

Java:
public class IntElem {
	
	private int value;
	private IntElem next;
	private IntElem previous;
	
	public IntElem () {}
	
	public IntElem (int newValue) {
		setValue(newValue);
	}
	
	public void setValue(int newValue) {
		value = newValue;
	}
	public int getValue() {
		return value;
	}
	
	public void setNext(IntElem nextElem) {
		next = nextElem;
	}
	public IntElem getNext() {
		return next;
	}
	public void setPrevious (IntElem previousElem) {
		previous = previousElem;
	}
	public IntElem getPrevious() {
		return previous;
	}
}

Java:
public class Liste {
	private IntElem start, ende;
	
	public Liste() {}
	
	public Liste(IntElem x, IntElem y, IntElem z) {setStart(x); setEnde(y); x.setNext(y); 
				 y.setNext(z); z.setPrevious(y); y.setPrevious(x); z.setNext(null);}
		
	public void setStart(IntElem x) {start = x;}
	public void setEnde(IntElem z) {ende = z;}
	public IntElem getStart() {return start;}
	public IntElem getEnde() {return ende;}
	
	public void insert(IntElem toInsert, int n) {
		if (n == 1) { 
			start.setPrevious(toInsert); 
			toInsert.setNext(start);
			toInsert.setPrevious(null);
			start = toInsert;
		}
		else {
			IntElem pos = start;
			int i = 1;
			while (i != n) { 
				if (i == (n-1)) 
					if (pos.getNext() != null){
						pos.getNext().setPrevious(toInsert);
						toInsert.setNext(pos.getNext());
						toInsert.setPrevious(pos);
						pos.setNext(toInsert);
						i++;
					}
					else {
						pos.getNext().setNext(toInsert);
						ende = toInsert;
						toInsert.setNext(null);
						toInsert.setPrevious(pos.getNext());
						i++;
					}
				
				else {pos = pos.getNext(); i++;}
			}
		}	
	}
	
	public String toString() {
		String output = "";
		for (IntElem pos = start; pos != null; pos = pos.getNext()) {
			output = output + pos.getValue() + " ";
		}
	 return output;
	}
}

Java:
import javax.swing.JOptionPane;
class ListeCheck {
	
	public static void main(String[] args) {
		IntElem a = new IntElem(10);
		IntElem b = new IntElem(20);
		IntElem c = new IntElem(30);
		Liste TestListe = new Liste(a,b,c);
		IntElem einfuegen = new IntElem(15);
		
		TestListe.insert(einfuegen,4);
		
	JOptionPane.showMessageDialog(null, TestListe.toString());
	}
}
 
S

SlaterB

Gast
Zeile 26
> if (pos.getNext() != null){
der else-Fall dazu tritt also genau dann zur Arbeit an, wenn pos.getNext() null ist, was das von dir gewünschte Ende der Liste sein dürfte,
was machst nun im else Fall mit pos.getNext() == null?
du rufst pos.getNext().setIrgendwas() auf, nicht so intelligent

arbeite an diesem else, diesmal daran denken, dass pos.getNext() == null ist,
sollte nicht so schwer sein, an pos selber Nachfolger setzen und ähnliches
 

XlabX

Mitglied
ah danke, der fehler hat wirklich in diesem else zweig gelegen. ich hab es folgendermaßen geändert und nun funktioniert alles :)

Java:
else {
						pos.setNext(toInsert);
						ende = toInsert;
						toInsert.setNext(null);
						toInsert.setPrevious(pos);
						i++;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
H Verkettete Liste Java Basics - Anfänger-Themen 7
N Verkettete liste rückwärts ausgeben Java Basics - Anfänger-Themen 18
K Verkettete Liste und seine Methoden Java Basics - Anfänger-Themen 1
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
V Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 3
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
G 2 Aufgabe rund um eine verkettete Liste Java Basics - Anfänger-Themen 2
O Verkettete Liste Java Basics - Anfänger-Themen 10
E Methoden auf von Methoden erstellte Objekte zugreifen (verkettete Liste) Java Basics - Anfänger-Themen 10
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
S Doppelt verkettete Liste Java Basics - Anfänger-Themen 3
G Doppelt Verkettete Liste Java Basics - Anfänger-Themen 2
A Doppelt Verkettete Liste Java Basics - Anfänger-Themen 16
E doppelt verkettete liste Java Basics - Anfänger-Themen 10
V Verkettete Liste. Java Basics - Anfänger-Themen 7
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Verkettete Liste - Methode entwerfen Java Basics - Anfänger-Themen 14
S Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 12
B Insertionsort verkettete Liste Java Basics - Anfänger-Themen 4
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
R verkettete liste ansEndeSchieben Java Basics - Anfänger-Themen 13
T Verkettete Liste Java Basics - Anfänger-Themen 14
A Klassen Innere Klassen, verkettete Liste Java Basics - Anfänger-Themen 9
B Zweifach-verkettete Liste umkehren Java Basics - Anfänger-Themen 6
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
kae verkettete Liste Java Basics - Anfänger-Themen 5
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
B OOP Verkettete Liste Java Basics - Anfänger-Themen 7
R verkettete liste Java Basics - Anfänger-Themen 5
M Verkettete Liste Java Basics - Anfänger-Themen 4
M verkettete liste Java Basics - Anfänger-Themen 7
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
B verkettete Liste Java Basics - Anfänger-Themen 8
S zyklisch verkettete Liste erstellen Java Basics - Anfänger-Themen 3
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
J verkettete Liste Java Basics - Anfänger-Themen 2
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 5
M verkettete Liste auslesen Java Basics - Anfänger-Themen 7
K eigene verkettete Liste Java Basics - Anfänger-Themen 4
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
A Eine verkettete Liste Java Basics - Anfänger-Themen 43
G verkettete lineare Liste Java Basics - Anfänger-Themen 2
L verkettete Liste - Ausgabeproblem Java Basics - Anfänger-Themen 2
G Wie kann ich eine verkettete Liste in ein JTable einfügen? Java Basics - Anfänger-Themen 7
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
R ArrayList Objekt -> verkettete Liste Java Basics - Anfänger-Themen 4
R verkettete Liste Java Basics - Anfänger-Themen 13
R verkettete Liste in und aus Datei Java Basics - Anfänger-Themen 5
M Doppelt verkettete Liste Zeiger Vorgänger beim Einfügen Java Basics - Anfänger-Themen 2
J doppelt verkettete Liste Java Basics - Anfänger-Themen 5
L doppelt verkettete Liste Java Basics - Anfänger-Themen 6
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
G Dopplelt verkettete liste Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben