Doppelverkettete List --> Element als String ausgeben?

Def1n1ty

Grünschnabel
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
 
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:
Code:
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ß
.
 
Die aufgabenstellung war folgende :

  1. 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.
  2. 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?
 
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:
Code:
// 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... :rolleyes:

Gruß
.
 
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 ...
 

Anhänge

Hi,

ich habe jetzt keine Zeit, den Code durchzugehen, aber setze die Methode toString einfach in die DLList:
Code:
	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ß
.
 
Zurück