doppelt verkette liste

  • Themenstarter Themenstarter hannes12
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

hannes12

Gast
Hallo Hallo!!!

Ich verzweifel schon die ganze Zeit an einer doppelt verketten Liste. Und zwar habe ich folgende Klassen. Ich möchte ein Buch objekt vorne in der Liste also zwischen head und dem folgen Knoten einfügen.
Laut meinen Angaben müsste das so funktionieren. Leider kommt, wenn ich das programm so starte immer eine

Exception in thread "main" java.lang.NullPointerException
at DList.addFirst(DList.java:17)
at BuchtestDop.main(BuchtestDop.java:6)


Ich vermute das das wie in der Exception meldung in der fett markierte markierten Zeile liegt. Was habe ich falsch gemacht?

Vielen Dank für die Hilfe
Code:
public class BuchtestDop {

	public static void main(String[] args){
		DList buchList = new DList();
		buchList.addFirst(new Buch("Algo Daten", "Saake"));
		buchList.addFirst(new Buch("Schöne Zeit", "Dirk Bach"));
	}
}
-----------------------------

Code:
public class DList {
		Node head = null;
		Node tail = null;
		
		public DList(){
			head = new Node();
			head.setNext(tail);
			tail = new Node();
			tail.setPrev(head);
			tail.setNext(tail);
		}
		
		//Erstes Element einketten
		public void addFirst(Object o){
			//neues Buch erstellen, 
			Node neu = new Node(o, head.getNext(), head);
			head.getNext().setPrev(neu);
			head.setNext(neu);
					
		}
}
______________________________

Code:
public class Node {
	Object element;
	Node next;
	Node prev;
	
		public Node(){
		}
		public Node(Object o, Node n , Node p){
			element =o;
			next=n;
			prev=p;
		}
	
		
		public void setElement(Object o){
			element=o;
		}
		public Object getElement(){
			return element;
		}
		public void setNext(Node n){
			next=n;
		}
		public void setPrev(Node p){
			prev=p;
		}
		public Node getNext(){
			return next;
		}
		public Node getPrev(){
			return prev;
		}
		
}

___________________________________

Code:
public class Buch {
	String buchtitel;
	String autor;

	public Buch(String sb, String sa){
		buchtitel=sb;
		autor=sa;
		
	} 
}
 
die Fehlermeldung sagt dir dass in Zeile 17 was nicht stimmt, auf ein null-Objekt zugegriffen wird,

und was steht in Zeile 17?
head.getNext().setPrev(neu);

entweder head oder head.getNext) ist null,

ja warum fragst du denn dann das Forum?
mach doch einfach vorher eine Ausgabe:
System.out.println("head: "+head);
if (head != null) {
System.out.println("head.next: "+head.getNext());
}

siehe da, head ist nicht null, head.getNext() schon,
war das schwer?

---------

nun nur noch die anderen 16 Zeilen des Progamms durchschauen,
in denen head.next gestezt wird bzw. gesetzt werden soll,
wenn man ungefähr weiß was das Programm tun soll fällt einem das einfacher,
aber in diesem Fall ja doch äußerst simpel:
Zeile head.setNext(tail); im Konstruktor

sieht zunächst mal korrekt aus, aber ist tail wirklich ein richtiges Objekt?
wie könnte man das überprüfen? genau, mit System.out.println, der einfachste Befehl der Welt..

aber man kann ja auch am Quelltext erkennen, dass tail zu diesem Zeitpunkt noch null ist,
wenn später der Variablen tail ein Objekt zugewiesen wird,
dann hat dies keine Auswirkunen auf head.next,
ok, das hätte man denken können, das ist gar nicht so leicht zu verstehen,
aber es ist nunmal so

a = null;
b = a;
a = c;

dann ist b immer noch null, nachzulesen in jedem guten Java-Buch,

---------

mit
Code:
public class DList {
      Node head = null;
      Node tail = null;
      
      public DList(){
         head = new Node();
         tail = new Node();
         head.setNext(tail);
         tail.setPrev(head);
         tail.setNext(tail);
      }
      
      //Erstes Element einketten
      public void addFirst(Object o){
         //neues Buch erstellen,
         Node neu = new Node(o, head.getNext(), head);
         head.getNext().setPrev(neu);
         head.setNext(neu);
               
      }
}

könnte es dagegen hinhauen, dann ist head.next wirklich tail
 
Hallo Hallo,

Vielen Dank für die richtungsweisende Antwort inklusiver der Anweislung zur Selbsthilfe....

Schönes WE.

hannes
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben