doppelt verkettete Liste: Fehler beim Einfügen

Status
Nicht offen für weitere Antworten.

raffi

Mitglied
Hallo, ich habe mir eine doppelt verkettete Liste erstellt, die als eine Buchverwaltung dienen soll. Die Buchklasse beinhaltet nur den Preis und den Titel des Buches.
Wenn ich mir die Liste anzeigen lassen will, dann wird nur das letzte Buch ausgegeben, aber in der Anzahl, in der auch die Bücher in der Liste vorhanden sind.
Also wenn ich drei Bücher eingetragen habe, erscheinen 3 Bücher, aber eben immer dassselbe, welches das zu letzt eingetragene ist.
Ich nehme an der fehler liegt beim sortiertem Einfügen in die Liste nach dem Titel des Buches.

Code:
public void einfuegen (Buch b) {
    	Knoten p = head;
    	Knoten previous = null;
    	Knoten temp = new Knoten(b);
    	
    	if (p == null) {
    		head = temp;
    		head.setNext(null);
    		return;
    	}
    	
    	while (p != null && p.getData().getTitel().compareTo(b.getTitel()) < 0) {
    		previous = p;
    		p = p.getNext();
    	}
    	temp.setNext(p);
    	
    	if (p == head) {
    		temp.setNext(head);
    		head.setPrev(temp);
    		head = temp;
    	}
    	else {
    		previous.setNext(temp);
    		temp.setPrev(previous);
    		if (p == null) {
    			tail = temp;
    			temp.setNext(null);
    		}
    		else {
    			p.setPrev(temp);
    			temp.setNext(p);
    		}
    	}
    }

Ich poste mal zur Sicherheit noch die Ausgabe-Methode:
Code:
public void durchlaufvorRek (Knoten head) {
    	if (head != null) {
    		head.getData().ausgabe();
    		durchlaufvorRek(head.getNext());
    	}
}

Ich danke für Hilfe.

mfg
 
S

SlaterB

Gast
ich hab jetzt 5 Min. drauf geschaut, bin aber vom Fernsehen zu abgelenkt, um etwas zu erkennen, mach es doch so:
sammel alle erstellen Knoten in einer statischen Liste (im Knoten-Konstruktor sich selber einfügen),
füge zwei Bücher in die Liste ein,
und gib dann von allen Knoten den Inhalt, prev + next,
sowie head + tail der Liste aus,

falls du die Knoten nicht z.B. durch ihren hashCode() eindeutig unterscheiden kannst, gib ihnen auch noch eine eindeutige Nummer, wiederum im Konstruktor, statische Variable hochzählen
 

max40

Bekanntes Mitglied
Ich habe auch keinen Fehler gefunden, habe mir mal die mühe gemacht die Knoten und Buch (ohne Preis) Klassen zu erzeugen! Die ausgabe kam auch in richtiger reihenfolge!

Kannst ja mal gucken wo der unterschiede zwischen deinem und meinem ist

Java:
final public class TestBuchKnoten {

	private Knoten head;

	private Knoten tail;
	
	public TestBuchKnoten(){
		einfuegen(new TestBuchKnoten.Buch("Titel 4"));
		einfuegen(new TestBuchKnoten.Buch("Titel 2"));
		einfuegen(new TestBuchKnoten.Buch("Titel 3"));
		einfuegen(new TestBuchKnoten.Buch("Titel 1"));
		
		durchlaufvorRek(this.head);
	}
	
	/**
	 * Eintrag einfügen
	 * @param b
	 */
	public void einfuegen(Buch b) {
		Knoten p = this.head;
		Knoten previous = null;
		final Knoten temp = new Knoten(b);

		if (p == null) {
			this.head = temp;
			this.head.setNext(null);
			return;
		}

		while (p != null && p.getData().getTitel().compareTo(b.getTitel()) < 0) {
			previous = p;
			p = p.getNext();
		}
		temp.setNext(p);

		if (p == this.head) {
			temp.setNext(this.head);
			this.head.setPrev(temp);
			this.head = temp;
		} else {
			previous.setNext(temp);
			temp.setPrev(previous);
			if (p == null) {
				this.tail = temp;
				temp.setNext(null);
			} else {
				p.setPrev(temp);
				temp.setNext(p);
			}
		}
	}
	
	/**
	 * Alles ausgeben
	 * @param head
	 */
	public void durchlaufvorRek (Knoten head) {
    	if (head != null) {
    		System.out.println(head.getData().getTitel());
    		durchlaufvorRek(head.getNext());
    	}
	}
	
	/**
	 * Start
	 * @param args
	 */
	public static void main(String[] args) {
		new TestBuchKnoten();
	}
	
	/**
	 * Buch
	 */
	public class Buch {
		public String _tit;

		public Buch(String tit) {
			this._tit = tit;
		}

		public String getTitel() {
			return this._tit;
		}
	}

	/**
	 * Knoten
	 */
	public class Knoten {
		private final Buch _b;
		private Knoten _next = null;
		private Knoten _pre = null;

		public Knoten(Buch b) {
			this._b = b;
		}

		public Buch getData() {
			return this._b;
		}

		public Knoten getNext() {
			return this._next;
		}

		public Knoten getPrev() {
			return this._pre;
		}

		public void setNext(Knoten k) {
			this._next = k;
		}

		public void setPrev(Knoten k) {
			this._pre = k;
		}
	}

}
 

raffi

Mitglied
OK, also wenn ich die Bücher "manuell" in die Methode einfuegen reingebe klappt es perfekt. Also stimmt bei der Übergabe mit Hilfe der Eingabe etwas nicht. Nur weis ich leider nicht was. Deshlab poste ich mal meine readData Methode aus der Buchklasse und die Methode in der Main-Klasse, in der die Eingabe per Tastatur gesteuert wird.

Buch.java
Java:
public void readData () {
    	in = new SimpleInput();
        titel = in.readString("Titel des Buches: ");
        preis = in.readDouble("Preis des Buches: ");
    }

Main.java
Java:
while (r == 'j') {
			i = in.readInt("Auswahl: ");
			if (i == 1) {
                        data = new Buch(); //das war am falschen Platz, so ist es richtig
				data.readData();
				eintrag.einfuegen(data);
			}
			else if (i == 2) {
				System.out.println("Geben sie bitte die Daten des zu löschenden Buches an.");
				data.readData();
				eintrag.loeschen(temp,data);
			}
			else if (i == 3) {
				eintrag.einfuegen(new Buch ("Test 1", 19.99)); //damit klappt
				eintrag.einfuegen(new Buch ("Test3", 100)); // es 
				eintrag.durchlauf(true);
			}
			r = in.readChar("Wollen Sie noch eine Operation ausführen? --> j/n");
		}

EDIT: OK, ich habe den Fehler gefunden. Ich darf natürlich das neue Buchobjekt auch erst erzeugen, wenn ich ein neues Buch einfügen will. Das heist in meinem Fall erst "data = new Buch()" wen ich die 1 drücke. Jetzt klappt alles so wie es soll. :oops:

Trotzdem danke ;)
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
chik Doppelt verkettete Liste bzw. Zirkulärliste (kleiner Fehler, den ich nicht finde) Allgemeine Java-Themen 4
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
J Doppelt verkettete Liste Allgemeine Java-Themen 6
M doppelt verkettete Listen Allgemeine Java-Themen 2
L Doppelt Verkettete Listen Allgemeine Java-Themen 6
M doppelt verkettete Listen? Allgemeine Java-Themen 5
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
D "Paste" String doppelt Allgemeine Java-Themen 14
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
N Fehler abfang läuft doppelt durch Allgemeine Java-Themen 2
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
M Alles doppelt in Eclipse syntaxhilfe Allgemeine Java-Themen 6
C Vier Stellen Keine Doppelt (Zufall) Allgemeine Java-Themen 20
G Array doppelt verkettet? Allgemeine Java-Themen 6
L doppelt gelinkte liste /getFirst/removeFirst/clear/Remove Allgemeine Java-Themen 2
S Thread wird nach erneutem Instanzieren doppelt gestartet!? Allgemeine Java-Themen 4
I Doppelt verkette Listen Allgemeine Java-Themen 2
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
K verkettete Liste Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
T Verkettete Suche Allgemeine Java-Themen 6
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
D Einfach verkettete Liste Allgemeine Java-Themen 3
X einfach verkettete Liste und Insertion Sort Allgemeine Java-Themen 3
R Verkettete Liste Allgemeine Java-Themen 5
E Verkettete Listen Allgemeine Java-Themen 5
M Schlange als verkettete Liste Allgemeine Java-Themen 4
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben