# Doppelverkettete List --> Element als String ausgeben?



## Def1n1ty (16. Januar 2005)

Hi,

würde gerne wissen wie ich bei einer Doppeltverketteten Liste per Zufalle erstellte Elemente als String ausgeben kann?

Hab für die "Knoten" also Elemente folgende class:

class DNode implements Position {
   private DNode prev, next; // References to the nodes before and after
   private Object element; // Element stored in this position
   // Constructor
   public DNode(DNode newPrev, DNode newNext, Object elem) {
     prev = newPrev;
     next = newNext;
     element = elem;
   }
   // Method from interface Position
   public Object element() throws InvalidPositionException {
     if ((prev == null) && (next == null))
       throw new InvalidPositionException("Position is not in a list!");
     return element;
   }
   // Accessor methods
   public DNode getNext() { return next; }
   public DNode getPrev() { return prev; }
   // Update methods
   public void setNext(DNode newNext) { next = newNext; }
   public void setPrev(DNode newPrev) { prev = newPrev; }
   public void setElement(Object newElement) { element = newElement; }
 }

ich soll eine toString() Methode schreiben in einer anderen class mit der die Elemente ausgegeben werden können ...

Kann mir wer helfen?

greetz
Def1n1ty


----------



## Tobias Menzel (16. Januar 2005)

Hi,

was genau sind denn das im Allgemeinen für Objekte, die in der Liste gespeichert werden? Entweder Du führst deren toString-Methode aus, oder Du gibst für Dich relevante Eigenschaften der Objekte aus:
	
	
	



```
public String toString() {
    String ostr = "Aktuelles Objekt: ";
    ostr += this.element.toString();
    ostr += "\nVorheriges Objekt: " + this.prev.element().toString();
    ostr += "\nNächstes Objekt: " + this.next.element().toString();
    return ostr;
}
```
Es kommt natürlich darauf an, _was_ für Informationen Du ausgeben willst.

Gruß
.


----------



## Def1n1ty (16. Januar 2005)

Die aufgabenstellung war folgende :


_toString()_: zeigt den Inhalt der Liste auf dem Bildschirm an und
_filter()_: das Prädikat berechnet von allen Listenelementen des Typs _Integer_ die Summe und gibt diese zurück.
Hinweis: Mit _obj instanceof Integer_ kann zur Laufzeit geprüft werden, ob _obj_ eine Instanz der Klasse _Integer_ ist.
Schreiben Sie ein Programm _TestDLList_ zum Test der Klasse _DLList_. Erzeugen Sie aus einer _int_-Zufallszahl verschiedene zufällige Objekte (_Integer_, _Double_, _String_, _Time_) und fügen Sie diese nach Typen geordnet in die Liste ein, so dass zuerst alle Integer-Objekte stehen, danach die Double-Objekte, die String-Objekte und zum Schluss alle Time-Objekte.
Testen Sie die beiden Methoden.
Also mit Math.random() generiere ich die zahlen 1,2,3 o. 4, dass ganze mit ner schleife 20mal also 20 objekte werden erzeugt und je nachdem was es ist wird es halt als int, double,string o. time objekt in eine Liste gespeichert ... 

Hab dafür 4 Listen erstellt wo in die erste alle int in die 2te alle double usw rein kommen .... damit die Obj erstmal getrennt sind ... 

Jetzt muss für die ausgabe erstma ne toString() methode her ... werd ma deine versuchen oder weißt du jetzt anhand der aufgabenstellung ne bessere?


----------



## Tobias Menzel (16. Januar 2005)

Hi,

hmm, die Klasse DLList hast Du bisher nicht erwähnt... wenn man eine solche "Verwaltungsklasse" hat, kann man sicher prima alle Einträge in der Liste mit einem Iterator durchlaufen... Ich habe es jetzt mal mit einer Methode printList versucht, die die Liste beginnend ab dem entsprechenden Objekt und gefiltert nach Typen auf der Konsole ausgibt:
	
	
	



```
// Zunächst einige statische Konstanten:

	public final static int UNKNOWN = 0, INT = 1, STRING = 2, DATE = 3;
	public final static boolean FORE = false, BACK = true;

// Dann die Methode toString() und eine, um den Typ des Objekts zu erfragen:

	public String toString() {
		return this.element.toString();
	}

	public int getType() {
		int mytype = Item.UNKNOWN;
		if (this.element instanceof Integer) mytype = Item.INT;
		if (this.element instanceof String) mytype = Item.STRING;
		if (this.element instanceof Date) mytype = Item.DATE;
		return mytype;
	}

// Und zuletzt die Methode printList:

	public void printList(int type, boolean direction) {
		if (getType() == type) {
			System.out.println(this.toString());
		}
		
		if (direction == Item.FORE) {
			if (this.next != null) this.next.printList(type, direction);
		} else {
			if (this.prev != null) this.prev.printList(type, direction);
		}
	}
```
 (Die Klasse heisst bei mir "Item")

... aber das ist wohl nicht das, was Du haben willst...   

Gruß
.


----------



## Def1n1ty (16. Januar 2005)

Die Klasse DLList ist die Klasse, die Methoden toString() und filter() enthalten soll ...

Der Rest geschieht in der TestDLList.
Hab mal in den Anhang das gepackt was ich habe um eine Doppeltverkettete Liste zu erstellen ... und die DLList soll das ganze erweitern um eine Liste auszugeben und zu die filter() Methode einzufügen ...


----------



## Tobias Menzel (16. Januar 2005)

Hi,

ich habe jetzt keine Zeit, den Code durchzugehen, aber setze die Methode toString  einfach in die DLList:
	
	
	



```
public String toString(Dnode node, boolean direction) {
		boolean go = true;
		String ostr = "";
		while (go) {	
			ostr += node.toString();
			if (direction == DLList.FORE) {
				if (node.next() != null) {
					ostr += "; ";
					node = node.next();
				} else {
					go = false;
				}
			} else {
				if (node.prev() != null) {
					ostr += "; ";
					node = node.prev();
				} else {
					go = false;
				}
			}
		}
		return ostr;
	}
```
, wobei die Methode toString() der Dnode-Klasse einfach die toString-Methode seines Element-Objektes aufruft.

... möglicherweise habe ich Dich auch falsch verstanden. 

Gruß
.


----------

