doppelt verkettete Liste

Status
Nicht offen für weitere Antworten.

JP

Mitglied
Servus,

hab hier ein problem mit meiner tollen doppelt verketteten Liste. Ich kann zwar wunderbar Elemtente in meine Liste einfügen, aber wenn ich nach einem Element suchen möchte um genau das zu entfernen läuft irgendwas im Code schief. Es kommt zu keiner Exception oder sonstigen fehlermeldung, aber ich nehme mal an das ich die suche nach dem element falsch programmiert habe. Habe die Stelle der Suche in der Klasse Liste kommentiert. Schon mal danke für sämtliche Hinweise, Kritik und Anregungen.

Gruß

P.S. Ich weiß das es mit der API schneller und einfacher geht, soll aber nich!



Hier mal der Code:



Code:
public class Knoten {
	public int Daten ;
	Knoten next;
	Knoten previous;
	public Knoten(int d){
		
		Daten=d;
	}
	public void zeigeKnoten(){
		System.out.print("{"+Daten+"}");
	}
	public final Knoten getNext(){
		return next;
	}
	public final Knoten getPrevious(){
		return previous;
	}
	public final void setNext(Knoten next){
		this.next=next;
	}
	public final void setPrevious(Knoten prev){
		this.previous=prev;
	}


}

public class Liste {
	private Knoten first;	/*Erstes Element*/
	private Knoten last;	/*Letztes Element*/
	static int count;		/*Anzahl der Elemente*/
	
	public Liste(){
		first = null;
		last  = null;
		count = 0;
	}
	boolean isLeer(){
		return(first==null);
	}
	public void add(int d){
		Knoten x = new Knoten(d);
		if(!isLeer()){
			x.setNext(first);
			x.setPrevious(null);
			first.setPrevious(x);
			first=x;
		}else{
			x.setNext(null);
			x.setPrevious(null);
			first=x;
			last=x;
		}
		count++;
	}
	public Knoten   remove(int d){
		Knoten z = new Knoten(d);
//		Knoten current = first;
		if(!isLeer()){
/*An dieser Stelle wird gesucht*/
			Knoten current=first;
			while((current!=null)&&(current!=z)){
				current=current.getNext();
			}
/*Ab hier fange ich an das jeweilige Element an der entsprechenden Stelle auszuketten*/
			if(current!=null){
				if((current==first)&&(current==last)){
					first=null;
					last=null;
				}else if(current==last){
					last=last.getPrevious();
					last.setNext(null);
				}else if(current==first){
					first=first.getNext();
					first.setPrevious(null);
				}else{
					Knoten previous=current.getPrevious();
					Knoten next=current.getNext();
					previous.setNext(next);
					next.setPrevious(previous);
				}
				count--;
			}
		}
		return z;
	}
	public void print(){
		Knoten current = first;
		while(current!=null){
			current.zeigeKnoten();
			current=current.next;
		}
		System.out.print("\t Anzahl der Elemente:"+count);
		System.out.println();
	}
	public static void main(String[]args){
		Liste neueListe = new Liste();
		neueListe.add(5);
		neueListe.print();
		neueListe.remove(5);
		neueListe.print();

		
	}




}
 
S

SlaterB

Gast
Fehlermeldung (mit Zeilennummer) sind schon sehr hilfreich!
ganz ganz grob gesehen ist sonst zumindest von mir nichts zu entdecken

edit: oder doch, liegst vielleicht an Stellen wie

first=first.getNext();
first.setPrevious(null);

wenn nur ein Element in der Liste ist liefert first.getNext() vielleicht null




--------

bei solch einfachen Vorgängen solltest du aber auch alle Probleme selber finden können,
vergleiche das was du dir vorstellst mit dem was das Programm tut,

wenn du nicht genau siehst was das Programm tut (insbesondere innerhalb von Schleifen),
dann mache eine Ausgabe wie:

Zeile 64: System.out.println("lese nun .getNext() von current: "+current);
Zeile 65: current=current.getNext();

wenn sich dann dein Programm mit NullpointerException in Zeile 65 verabschiedet und du als letzte Logausgabe
'lese nun .getNext() von current: null'
liest, dann weißt du woran es gelegen hat ;)

ist ein triviales Beispiel, aber so in der Art kann man bei dieser Art Programmen jeden beliebigen Fehler selber finden
 

JP

Mitglied
Also erstmal danke für die Antwort. Aber wie du sicher gelesen hast kommt es zu "keiner" Fehlermeldung.

Und laut meiner Vorstellung solte das gewünschte Element über meine Suche gefunden werden, wird es aber nich!

Das mit den Ausgaben in den schleifen is natürlich keine schlechte idee, ich persöhnlich bevorzuge da aber den debugger. Daher meine Frage anders gestellt is meine Bedingung in der while Schleife falsch mir fällt im moment keine andere ein.
 
Q

qpid-nli

Gast
Moin,

schau mal bitte hier:

Code:
      Knoten z = new Knoten(d);
//      Knoten current = first;
      if(!isLeer()){
/*An dieser Stelle wird gesucht*/
         Knoten current=first;
         while((current!=null)&&(current!=z)){
            current=current.getNext();
         }


Du weist z ein neues Objekt zu. Und versuchts anschließend in der While-Schleife mit einem Vergleich des neuen Objektes und den in der Liste das gewünschte zu finden:
Code:
while((current!=null)&&(current!=z)){
Entweder du überschreibst in der Knotenklasse die methode "public boolean equals(Object obj)" so, dass diese nachschaut,, erstens ob das übergebene Objekt vom Typ Klasse ist und zweitens ob es die selben Daten hält. In deinem fall wäre das der vergleich von den public Variabeln Daten.

Code:
   public boolean equals(Object obj) {
	if (obj instanceof Knoten) {
		Knoten knoten = (Knoten) obj;
		return (this.Daten == knoten.Daten);
	}
	return false;
   }

Diese Variante kann man so nutzen aber ist auch mit Einschränkungen genießen, da nun kein Vergleich mehr mit dem "==" Operator gemacht werden kann um herauszufinden ob es sich um das selbe Objekt handelt.

Eine andere Variante wäre einfach die While-Bedingung abzuändern:

Code:
while((current!=null)&&(current.Daten!=d)){...

Ich hoffe ich konnte dir helfen. Ein Link noch zum Thema "==" und der Methode equals aus der Klasse "java.lang.Object" http://www.galileocomputing.de/openbook/javainsel5/javainsel03_006.htm#Xxx999444

mfg qpid
 
S

SlaterB

Gast
ah, gut, bisschen zu schnell von mir gelesen

also den Knoten z erzeugst du ja neu (new Knoten(d))
damit kann dieser Knoten unmöglich gleich einem anderen auf der Welt sein,
kann unmöglich in der Liste sein da er ja eben erst erzeugt wurde,

was du suchst ist ein anderer Knoten mit gleichen Inhalt,
wäre die equals-Operation ordentlich implementiert könntest du

while((current!=null)&& !current.equals(z)){

nehmen,

so wirst du aber wahrscheinlich direkt auf den int zugreifen müssen:
while((current!=null)&&(current.Daten!=z.Daten)){

-----------

um nochmal auf das nachhaltige Lernen zurückzukommen ;)

dies wäre mit
System.out.println(" vergleiche current (Ausgabe current)+ z (Ausgabe z), Ergebnis = (true oder false)");

leicht zu finden gewesen, mit Debugger natürlich auch
 

JP

Mitglied
Vielen Dank für die antworten, jetzt läufts. Hab mich dafür entschieden direkt auf den int zuzugreifen. Is ja auch eigentlich glasklar. Aber hinterher weiß man immer mehr. Noch mal danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
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
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
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
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
M Doppelt verkettete Liste Zeiger Vorgänger beim Einfügen Java Basics - Anfänger-Themen 2
L doppelt verkettete Liste Java Basics - Anfänger-Themen 6
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R Datentyp Ring - zyklisch doppelt verkettete Liste - HILFE! Java Basics - Anfänger-Themen 12
R doppelt verkettete Liste Java Basics - Anfänger-Themen 8
F doppelt verkettete liste! Java Basics - Anfänger-Themen 8
R doppelt verkettete azyklische Liste Java Basics - Anfänger-Themen 2
T Klasse in Java für doppelt verkettete Listen Java Basics - Anfänger-Themen 4
H Doppelt verkettete Listen Java Basics - Anfänger-Themen 2
S doppelt verkettete Listen Java Basics - Anfänger-Themen 4
X Vererbung: Doppelt verkettete Listen Java Basics - Anfänger-Themen 16
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
T Löschen in doppelt verketteter Liste Java Basics - Anfänger-Themen 1
L Input/Output Println wird doppelt ausgeführt Java Basics - Anfänger-Themen 11
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
M Liste Implementation, doppelt next() Java Basics - Anfänger-Themen 13
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
Salo Datentypen "Doppelt" List(e) ("gesucht") Java Basics - Anfänger-Themen 6
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
T Java Methode wird unerwünscht doppelt aufgerufen?! Java Basics - Anfänger-Themen 4
OnDemand Doppelt Werte CSV Java Basics - Anfänger-Themen 2
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
E Erste Schritte Sortieren von Objekten in doppelt-verlinkter Liste Java Basics - Anfänger-Themen 9
S Methoden Methode wird doppelt aufgerufen ... Java Basics - Anfänger-Themen 5
J Mehrere Zufallszahlen erzeugen, aber keine darf doppelt erzeugt werden - Wie? Java Basics - Anfänger-Themen 5
B Doppelt gekettete Listen Java Basics - Anfänger-Themen 4
G PropertyChangeListener empfängt Events doppelt Java Basics - Anfänger-Themen 5
L doppelt verkette Liste Java Basics - Anfänger-Themen 5
H Fenster doppelt gezeichnet. Java Basics - Anfänger-Themen 2
G Einfügen aus Zwischenablage - alles doppelt? Java Basics - Anfänger-Themen 2
G JFileChooser kommt doppelt Java Basics - Anfänger-Themen 3
N Nullpointerexception bei Doppelt verketteter Liste Java Basics - Anfänger-Themen 7
M Listen richtig doppelt verkettet? Java Basics - Anfänger-Themen 13
D Exceptions in doppelt verketteter Liste Java Basics - Anfänger-Themen 5
C verify() wird doppelt aufgerufen (JTable + InputVerifier) Java Basics - Anfänger-Themen 8
H doppelt verkette liste Java Basics - Anfänger-Themen 2
L rückwärtsausgeben einer doppelt verketteten liste Java Basics - Anfänger-Themen 2
G JList und ListCellRenderer - Vector erscheint doppelt Java Basics - Anfänger-Themen 6
G JComboBox gibt SelectedItem immer doppelt aus Java Basics - Anfänger-Themen 4
B Array doppelt Felder löschen Java Basics - Anfänger-Themen 27
M Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 2
R Zeilen aus datei lesen + doppelt gespeichert? Java Basics - Anfänger-Themen 3
G Trotz Abfrage immer noch Zahlen doppelt Java Basics - Anfänger-Themen 3
R Benutzerregistrierung: Doppelt registriert. Java Basics - Anfänger-Themen 8
M Verkettete Liste Java Basics - Anfänger-Themen 1
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
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
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A Verkettete Liste Java Basics - Anfänger-Themen 2
L verkettete Liste Java Basics - Anfänger-Themen 15
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
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
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
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben