Listenelemente ausgeben

Status
Nicht offen für weitere Antworten.

granini

Bekanntes Mitglied
Hallo,

ich habe folgendes Test-Programm geschrieben, um mich mit doppeltverketteten listen zu beschäftigen. Leider kriege icg nur eine Ausgabe a la Klasse@Speicheradresse hin.. Wie kann ich das für diesen Fall richtig stellen?

Mein Code.

Code:
class ListElem {
	String adr;
	String seite;
	
	public String toString(){
		String result = adr + seite;
		return result;
	}
	
	ListElem(String a, String s){
		adr =  a;
		seite = s;
	}
	
	
}
class Entry {
	ListElem element;
	Entry next;
	Entry previous;
	
	Entry(ListElem element, Entry next, Entry previous) {
		this.element = element;
		this.next = null;
		this.previous = null;
	}
	
}

class LinkedList {
	Entry header = new Entry(null,null,null);
	int size = 0;
	
	LinkedList() {
		header.next = header;
		header.previous = header;
	}
	ListElem getLast() {
		if( size==0 ) ;
		return header.previous.element;
	}
		
	ListElem removeLast() {
		Entry lastentry = header.previous;			
		if(lastentry==header);
		lastentry.previous.next = lastentry.next;
		lastentry.next.previous = lastentry.previous;
		size--;
		return lastentry.element;
	}
	void addFirstPos(ListElem e) {
		Entry newEntry = new Entry(e, header.next, header);
		header.next.previous = newEntry;
		header.next = newEntry;
		size++;
	}
	void addLastPos(ListElem e) {
		Entry newEntry = new Entry(e, header, header.previous);
		header.previous.next = newEntry;
		header.previous = newEntry;
		size++;
	}
	
	
	int size() {
		return size;
	}
}

public class LinkedListTest {

	public static void main(String[] args) {
		LinkedList myList = new LinkedList();
		
		myList.addLastPos(new ListElem("ok","Seite 2"));
	
		myList.addFirstPos(new ListElem("ok","Seite 1"));
		System.out.println("Liste : "+myList.toString());
	}

}
 

Timmah

Bekanntes Mitglied
Code:
System.out.println("Liste : "+myList.toString());

Die toString()-Methode kann dir hierbei auch nicht weiterhelfen, da sie nicht so implementiert ist, wie du das willst (woher soll die denn wissen, dass du über die Liste iterieren, und jedes Element ausgeben willst?).
Genau das musst du nämlich machen :)
 

granini

Bekanntes Mitglied
Ja, aber in der Klasse LinkedList habe ich keine Werte die ich anpacken kann/darf, so wie z.b. in der Klasse Listelem..
 

Timmah

Bekanntes Mitglied
Du hast da doch zwei Strings, wo doch wohl irgendwas drin steht.
Die kannst du doch ausgeben?!
Über die LinkedList kommst du doch an die einzelnen ListElem
 

granini

Bekanntes Mitglied
Ja richtig.. Die beiden Strings habe ich in der Klasse ListElem. Und wie komme ich jetzt über ide Klasse LinkedList an diese beiden ran?? Ich wüßte nun garnicht wie?
 

alehandro

Mitglied
granini hat gesagt.:
Ja richtig.. Die beiden Strings habe ich in der Klasse ListElem. Und wie komme ich jetzt über ide Klasse LinkedList an diese beiden ran?? Ich wüßte nun garnicht wie?

Hallo! vllt hast Du das schon selbst hingekriegt - du musst über die list elemente iterieren, sowas wie:

ListElem dummy = null;
for( int i = 0; i < myList.size(); i++ ){
dummy = (ListElem) myList.get(i);
System.out.println( dummy.toString() );
}

Du musst nur noch in ListElem die Methode toString() überschreiben.

...
public String toString(){
return string1 + string2; // ich habe jetzt vergessen wie die Membervariablen in ListElem genannt hast
}
 

Timmah

Bekanntes Mitglied
Also du musst in der Klasse LinkedList irgendwo eine Methode bereitstellen, die dir das erste Element zur Verfügung stellt.

Dann machst du das in etwa so:

Code:
LinkedList list;
ListElem temp = list.getFirst();

while(temp != null)
{
          String ausgabe = temp.getAdr() + " " + temp.getSeite(); //Diese Methode musst du noch implementieren
          System.out.println(ausgabe);
          temp = temp.getNext(); //die Methode musst du auch noch implementieren
}

Du gibst dann solange die Daten aus, wie temp != null ist, also solange, wie es noch nachfolger gibt.
 

granini

Bekanntes Mitglied
Danke für eure Hilfe.. Ich habe zunächst einen anderen Weg gesucht und wollte mal wissen, ob und wie ich den zu Ende bringen kann.

Und zwar mit der inneren Klasse ListIterator... Und nun habe ich Probleme die toString() Methode in der Klasse ListElem zu implementieren.. Wenn vielelciht mir da jemand weiterhelfen könnte...??

Das Programm:
Code:
class LinkedList {
	Entry header = new Entry(null,null,null);
	int size = 0;
	
	class Entry {
		ListElem element;
		Entry next;
		Entry previous;
		
		Entry(ListElem element, Entry next, Entry previous) {
			this.element = element;
			this.next = null;
			this.previous = null;
		}
		
	}
	class ListIterator {
		private int nextIndex = 0;
		private Entry next = header.next;
		boolean hasNext() {
		return nextIndex != size;
		}
		ListElem next() {
		if( nextIndex==size );
		ListElem elem = next.element;
		next = next.next;
		nextIndex++;
		return elem;
		}
	}
	ListIterator listIterator() {return new ListIterator();}
	
	LinkedList() {
		header.next = header;
		header.previous = header;
	}
	ListElem getLast() {
		if( size==0 ) ;
		return header.previous.element;
	}
		
	ListElem removeLast() {
		Entry lastentry = header.previous;			
		if(lastentry==header);
		lastentry.previous.next = lastentry.next;
		lastentry.next.previous = lastentry.previous;
		size--;
		return lastentry.element;
	}
	void addFirstPos(ListElem e) {
		Entry newEntry = new Entry(e, header.next, header);
		header.next.previous = newEntry;
		header.next = newEntry;
		size++;
	}
	void addLastPos(ListElem e) {
		Entry newEntry = new Entry(e, header, header.previous);
		header.previous.next = newEntry;
		header.previous = newEntry;
		size++;
	}
	
	
	int size() {
		return size;
	}

}

class ListElem {
	private LinkedList liste = new LinkedList();
	
	String adr;
	String seite;
	
	public String toString(){
		ListElem output = null;
	  	
	  	LinkedList.ListIterator temp  = liste.listIterator();
	  		for (int i=0 ; i<liste.size ; i++){
	  			output = temp.next();
	  	}
	  	return output;
	}
	
	
	ListElem(String a, String s){
		adr =  a;
		seite = s;
	}
	String getAdr (){
		return adr;
	}
	String getSeite(){
		return seite;
	}
}




public class LinkedListTest {

	public static void main(String[] args) {
		LinkedList myList = new LinkedList();
		
		myList.addLastPos(new ListElem("ok","Seite 2"));
	
		myList.addFirstPos(new ListElem("ok","Seite 1"));
	
		for (int i = 0; i < myList.size() ; i++ ){
			
			System.out.println("Liste : "+myList.toString());
		}
	
	}

}

Danke

Grüsse
 

alehandro

Mitglied
Als Hint musst Du wissen, dass alle Container Objekte zurückliefern. Also die sind schon vom richtigen Typ, aber die Sicht auf diese Objekte ist wie auf Objects also vom Typ Object . Deswegen musst Du CASTen. den Typ umwandeln - einfach dem Kopeiler mitteilen, dass das da ein Objekt eines anderen Typs ist.

und vorallem da in ner Schleife rufst Du wieder eine toString() Methode, die du nicht implementiert hast -> und wirst wieder kryptische Werte rausbekommen.

Also jede Klasse hat die Methode toString, da sie in der Klasse Object vorhanden ist. Was sie macht ist eben eine kryptische ausgabe zu generieren. Du hast die Möglichkeit in deinen eigenen Klassen diese toString Methode zu überschreiben und eine geeignetere Ausgabe zu erzeugen.
 

granini

Bekanntes Mitglied
Hmm, ich denke theoretisch habe ich das schon verstanden nur kann ich das nicht praktsich umsetzen..

Die Klasse ListIterator gibt mir immer das aktuelle Element zurück. Die Methode next() in der Klasse Linkedlist muss ich meines Erachtens anpsrechen aus der Klasse Elem mit der Methode toString.. Und hier scheitert es wieder daran, dass ich in dieser klasse nichts zum Anpacken habe...

???:L
 

alehandro

Mitglied
granini hat gesagt.:
Hmm, ich denke theoretisch habe ich das schon verstanden nur kann ich das nicht praktsich umsetzen..

Die Klasse ListIterator gibt mir immer das aktuelle Element zurück. Die Methode next() in der Klasse Linkedlist muss ich meines Erachtens anpsrechen aus der Klasse Elem mit der Methode toString.. Und hier scheitert es wieder daran, dass ich in dieser klasse nichts zum Anpacken habe...

???:L

ich glaube Du hast ziemlich viele der Konzepte etwas durcheinander gebracht. Sieht im code halt so aus.

1. Wozu implementierst Du LinkedList wenn es sowas schon gibt?
wenn Dir LinkedList's FUnktionalitäten nicht ausreichen, dann macht man das so, dass Du eine Klasse Erstellst, die von LinkedList erbt und deren Funktionalität erweitert ... was Dir eben fehlt. Oder man geht den anderen weg Klasse erstellen, die dann LinkedList in sich hat, und für die Arbeit benutzt. Beides hat seine Vor und Nachteile, ist halt je nachdem. ABer wird es tun.

2. ListIterator listIterator() {return new ListIterator(); diese Zeile hier gibt einfach einen leeren ListIterator zurück, der gar nichts von deiner LinkedListe weiß, ergo hat auch nichts worüber er iterieren kann. Siehe 1. der code würde dann so aussehen :

Code:
Public MyLinkedList {
   myList = new LinkedList(); // worker Klasse
//...
public ListIterator listIterator(){
   return myList.listIterator();
}
}
bzw. bei vererbung brauchst Du die Methode gar nich implementieren. Die ist ja schon dabei.

3. Wozu brauchst Du Entry überhaupt? Ich habe sie nirgendwo in deinem Code verwendet gesehen.

4.
Code:
System.out.println("Liste : "+myList.toString());
das gibt Dir nur einen Hashwert von LinkedList als String zurück.
es sollte eher so aussehen ...
Code:
System.out.println("Liste: " + myList.get(i)); // das gilt für den Fall dass Du von LinkedList erbst.
//und myList ListElem in sich hat, da die ja toString() haben ... 
//damit das ganze gut geschrieben ist muss auch gecastet werden, wird aber in dem Fall auch ohne funktionieren...

5. Kuck Dir einen einfacheren Beispiel über Listen etc. an, damit Du etwas Gefühl bekommst wie die Dinger so funktionieren, dann leuchtet es!
 

granini

Bekanntes Mitglied
Erstmal Danke dir für deine Mühen...

alehandro hat gesagt.:
1. Wozu implementierst Du LinkedList wenn es sowas schon gibt?

3. Wozu brauchst Du Entry überhaupt? Ich habe sie nirgendwo in deinem Code verwendet gesehen.

4.
Code:
System.out.println("Liste : "+myList.toString());
das gibt Dir nur einen Hashwert von LinkedList als String zurück.
es sollte eher so aussehen ...
Code:
System.out.println("Liste: " + myList.get(i)); // das gilt für den Fall dass Du von LinkedList erbst.
//und myList ListElem in sich hat, da die ja toString() haben ... 
//damit das ganze gut geschrieben ist muss auch gecastet werden, wird aber in dem Fall auch ohne funktionieren...

5. Kuck Dir einen einfacheren Beispiel über Listen etc. an, damit Du etwas Gefühl bekommst wie die Dinger so funktionieren, dann leuchtet es!

Zu 1.
Das mache ich ehrlich gesagt aus reiner Übung. Irgendwo war die Klasse LinkedList aufgeführt und ich will diese implementieren, so wie sie ist. Anschließend will ich ja das Lsitenverhalten üben und einige Methoden direkt in der LinkedList selbst implementieren..

Zu 3
Also die Entry brauche ich doch spätestens um die Listenelemente zu initialisieren.

Zu 4

Ok, das versuche ich so in der Klasse LinkedList zu implementieren. Aber wie muss die Methode get() aussehen bzw was gibt sie zurück.. (ich weiss die gibt es standardmäßig in Linkedlist, aber zur Übung will ich sieh alt selbst implemtieren..)

So sieht meine Klasse Linkedlist zur Zeit aus:
class LinkedList {
public LinkedList myList;
public int index;
Entry header = new Entry(null,null,null);
int size = 0;

class Entry {
ListElem element;
Entry next;
Entry previous;

Entry(ListElem element, Entry next, Entry previous) {
this.element = element;
this.next = null;
this.previous = null;
}

}
class ListIterator {
private int nextIndex = 0;
private Entry next = header.next;
boolean hasNext() {
return nextIndex != size;
}
ListElem next() {
if( nextIndex==size );
ListElem elem = next.element;
next = next.next;
nextIndex++;
return elem;
}
}

public ListIterator listIterator() {
return myList.listIterator();
}

LinkedList() {

header.next = header;
header.previous = header;
}
ListElem getLast() {
if( size==0 ) ;
return header.previous.element;
}


ListElem removeLast() {
Entry lastentry = header.previous;
if(lastentry==header);
lastentry.previous.next = lastentry.next;
lastentry.next.previous = lastentry.previous;
size--;
return lastentry.element;
}
void addFirstPos(ListElem e) {
Entry newEntry = new Entry(e, header.next, header);
header.next.previous = newEntry;
header.next = newEntry;
size++;
}
void addLastPos(ListElem e) {
Entry newEntry = new Entry(e, header, header.previous);
header.previous.next = newEntry;
header.previous = newEntry;
size++;
}
public Object get(int index){
if (index == 0)
return ;
return (index-1);
}

public String toString(){
int i;
for (i = 0; i < myList.size();i++){
System.out.println(myList.get(i));
}
}

int size() {
return size;

}

}
 

alehandro

Mitglied
zur LinkedList ....
da kann ich Dir wärmstens empfehlen die Java Bibliotjhek als source runterzuladen, und bei Fragen da reinzuschauen :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Applet: mehrere Listenelemente nach Knopfdruck ausgeben Java Basics - Anfänger-Themen 2
J Breite und Höhe aller Monitore ausgeben. Java Basics - Anfänger-Themen 10
G JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
G JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
H Minimum und Maximum ausgeben lassen Java Basics - Anfänger-Themen 7
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
Tommilee Char ausgeben Java Basics - Anfänger-Themen 5
K Geldbetrag in Euro + Cents ausgeben Java Basics - Anfänger-Themen 24
M geschachtelte for-Schleifen - Einmaleins ausgeben Java Basics - Anfänger-Themen 3
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
JavaBeginner22 Wort mit der größten Länge ausgeben Java Basics - Anfänger-Themen 4
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
berserkerdq2 Methodenaufrufstapel ausgeben, was ist das? Java Basics - Anfänger-Themen 2
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
Robin Gentele XML von Webserver lesen und ausgeben Java Basics - Anfänger-Themen 5
W Array ausgeben Java Basics - Anfänger-Themen 29
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
S Schachbrettmuster ausgeben Java Basics - Anfänger-Themen 3
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Array rückwärts ausgeben Java Basics - Anfänger-Themen 2
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
Kotelettklopfer Stringbuilder mit print ausgeben Java Basics - Anfänger-Themen 83
L Methoden Rückgabewert Verbergen / nicht mit ausgeben Java Basics - Anfänger-Themen 4
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
S Primzahlen in Array ausgeben Java Basics - Anfänger-Themen 14
O Anzahl Datensätze ausgeben Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Koordinaten per Schleife ausgeben Java Basics - Anfänger-Themen 6
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
M Wie kann ich hier den Abstand ausgeben? Java Basics - Anfänger-Themen 3
W Anzahl der Zeilen ausgeben lassen Java Basics - Anfänger-Themen 20
U Teilergebniss mit 0 nicht ausgeben Java Basics - Anfänger-Themen 3
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
T Bestimmte Zahlen ausgeben mit einer whilfe Schleife Java Basics - Anfänger-Themen 21
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
R Löschen und ausgeben eines Teilbaums Java Basics - Anfänger-Themen 3
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
J Tic Tac Toe ausgeben Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
H Ungerade Zahlen ausgeben von 1 bis 1000 Java Basics - Anfänger-Themen 8
N Tabelle schön in der Konsole ausgeben Java Basics - Anfänger-Themen 5
P Ziffer in der Mitte ausgeben Java Basics - Anfänger-Themen 12
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
B Nur eine bestimmte Anzahl an Arrays ausgeben Java Basics - Anfänger-Themen 9
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
J Anführungszeichen ausgeben Java Basics - Anfänger-Themen 3
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
H Gemeinsame Schnittmenge zweier Arrays ausgeben Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben