Doppeltverkettete Listen + Text

Psynox

Mitglied
Grüße euch,

erstmal voraus wünsche ich ein frohes Neues 2011.

Nun direkt zu meinem Anliegen. Ich muss mithilfe einer doppelt verketteten Liste einen Text editieren können. Mein Problem ist nun, wie bekomme ich einen Text mit Absätzen etc. in einen doppelt verkettete Liste?

Example:

Ich bin ein Text.
Bestehend aus mehreren Zeilen

und noch weiteren Zeilen
und so weiter.

Mir ist das insofern klar das jeder Knoten in der Liste eine Zeile repräsentiert doch wie bekomme ich das elegant gelöst?

Ich hoffe ihr könnt mir weiterhelfen.
 

eRaaaa

Top Contributor
Also die Frage ist etwas schwammig, was sollen wir dir jetzt darauf antworten, bzw. was erwartest du als Antwort? :)
Reden wir von einer doppelt-verketteten Liste aus dem JDK? Von einer eigenen Implementierung ? Und wo genau besteht jetzt das Problem? Ein Knoten besteht aus Vorderknoten, nächster Knoten + Element, wobei das Element = ein String sein könnte = eine Zeile

???:L
 

Psynox

Mitglied
Vielleicht hilft die Angabe weiter.

Schreiben Sie die Klassen Line und Text, die eine Text-Zeile bzw. einen gesamten Text bestehend aus Text-Zeilen repräsentieren sollen.

Zusätzlich soll es für die aktuelle Position im Text beim Editieren eine Klasse Cursor geben.
Überlegen Sie sich, wie Sie den Cursor in Beziehung zu den anderen Klassen setzen und schreiben Sie entsprechende Methoden zum Positionieren des Cursors und auch zum relativen Verschieben des Cursors (z. B. ein Zeichen nach rechts, eine Zeile nach oben). Diskutieren Sie verschiedene Möglichkeiten der Kapselung und wählen Sie die nach Ihrer Meinung beste aus (z. B. ist das Cursor-Objekt für den Benutzer sichtbar oder "hinter" Text "versteckt"?)

Realisieren Sie außerdem gezielt Methoden in Ihren Klassen, die folgendes Verhalten unterstützen:

* Rückgabe des gesamten Textes als String (bei größeren Texten evtl. beschränken auf eine bestimmte Zeilenzahl).
* Rückgabe der Zeile unter dem Cursor als String.
* Löschen des Zeichens unter dem Cursor.
* Ersetzen des Zeichens unter dem Cursor durch ein neues Zeichen (spezifiziert als Übergabeparameter).
* Einfügen eines Zeichens (Übergabeparameter) bzw. einer Zeichenfolge an der aktuellen Cursor-Position.
* Erfragen der Zeilennummer, bzw. der exakten Position des Cursors.
* Löschen der gesamten Zeile unter dem Cursor.
* Einfügen einer neuen Zeile (mit spezifiziertem Inhalt) vor dem Cursor.
* Erfragen der Länge der Zeile, auf der der Cursor steht (Zahl der Zeichen!).
* Erfragen der Länge des gesamten Texts.

Überlegen Sie die für diese Zwecke erforderlichen Attribute, definieren Sie geeignete Konstruktoren für die Klassen, und sorgen Sie dafür, daß eine sinnvolle Aufgabenteilung zwischen den Klassen entsteht.
Berücksichtigen Sie insbesondere das Prinzip "Kapselung".

Zur Speicherung der Zeichenfolge einer Zeile (in der Klasse Line) verwenden Sie nunmehr sinnvollerweise ein String-Objekt, zur "Manipulation" der Zeileninhalte somit Stringmethoden bzw. wo sinnvoll auch die Klasse StringBuffer (bzw. StringBuilder) und ihre Methoden.

Als Speichermodell für die Klasse Text soll eine doppelt verkettete Liste verwendet werden. Dabei könnte es hilfreich sein, jeweils ein Dummy-Element am Anfang und Ende der Liste zu verwenden.

Stellen Sie, bevor Sie mit der Codierung beginnen, die Zusammenhänge in einem Klassendiagramm dar. Wenn Sie ein geeignetes Tool dafür verwenden, können Sie daraus den Coderahmen für Ihre Klassen generieren lassen. Erstellen Sie exemplarisch für den Use-Case "Löschen des Zeichens unter dem Cursor" ein Sequenzdiagramm.

Schreiben Sie eine weitere Klasse, die als Testrahmen zum Austesten der in den Klassen Line, Cursor, und Text implementierten Methoden dient, indem Sie dort in einer sinnvollen Reihenfolge die Methoden der Klasse mit adhoc-gewählten Parametern aufrufen.

Gehen Sie bei der Entwicklung so vor, dass Sie erst isoliert die Klassen Line und Cursor, entwickeln und austesten, und erst anschließend die Klasse Text in Angriff nehmen.

So mein Problem ist das ich keinerlei Ahnung habe wie ich das mit einem kompletten Text anstellen soll in Kombination mit einer doppelt verketteten Liste.

Folgender Code ist für die oben genannte Liste:

Java:
public class LinkedList {

	private ListElement listHead;
	private ListElement listTail;
	
	public LinkedList() {
		listHead = new ListElement();
		listTail = listHead;
	}
	
	public void push(String str){
		ListElement newElem = new ListElement();
		newElem.data = str;
		
		listTail.next = newElem;
		newElem.prev = listTail;
		
		listTail = newElem;		
	}
		
	public String pop(){
		String ret = listTail.data;
		listTail.prev.next = null;
		listTail = listTail.prev;
		return ret;
	}
	
	public int getSize(){
		int counter = 0;
		ListElement zeiger = listHead;
		while(zeiger.next != null){
			counter++;
			zeiger = zeiger.next;
		}
		return counter;
	}

	private ListElement get(int pos){
		ListElement zeiger = listHead;
		int counter = -1;
		while(zeiger.next != null && counter < pos){
			counter++;
			zeiger = zeiger.next;
		}
		return zeiger;
	}
	
	public void insert(String s, int pos){
		int size = getSize();
		if (pos > size){
			throw new RuntimeException("out of bounds");
		}
		ListElement insPos = get(pos);
		
		ListElement newElem = new ListElement();
		newElem.data = s;
		
		newElem.prev = insPos;
		newElem.next = insPos.next;
		
		insPos.next = newElem;
		newElem.next.prev = newElem;
	}	
}

Ich möchte nun einen Text so mitgeben wie er ist mit Absätzen etc. und die Klasse "Text" soll nun selbstständig jedem Knoten eine Zeile zuweisen, da es glaube ich unkomfortabel ist jede Zeile mit .push hinzuzufügen.

Ich hoffe das ist nun etwas verständlicher geworden.
 

Taggert

Mitglied
Ich bin mir nicht ganz so sicher, ob ich Deine Frage richtig verstanden habe, daher schreibe ich einmal wie ich es machen würde. Jetzt ohne deine Hausaufgaben lösen zu wollen.

Du erstellst ein File Objekt.
Java:
File file = new File("data.txt");

Damit hast Du schon mal ne Referenz auf die Datei. Mit Hilfe eines Scanner Objektes liest Du die Datei dann zeilenweise ein.
Java:
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) { 
String line = scanner.nextLine(); 
}

Jetzt hast Du einen String genannt line, den Du in Deine Liste schieben kannst.
Wo ist das Problem?
 
Zuletzt bearbeitet:

Psynox

Mitglied
Das ich nicht mit Scanner arbeiten darf. v.v
Mein Problem ist einfach. Das wenn ich einen mehrzeiligen Text in einer doppelverketteten Liste haben will, ich nicht weißwie ich das bewerkstelligen soll ohne es manuell selbst machen zu müssen ergo selber die Knoten mit Inhalt zu füllen dies soll wenn möglichst alleine funktionieren doch leider weiß ich nicht wie.

Hatte schonüberlegt mithilfe einer Suche nach \n aber irgendwie ging der Gedanke ins nichts.
 

Taggert

Mitglied
Java:
	try {
		BufferedReader in = new BufferedReader(new FileReader("text.txt"));
		String line = null;
		while ((line = in.readLine()) != null) {
		       System.out.println(line); //hier die Zeile in die Linked-List schreiben
		}
	} catch (IOException e) {
		e.printStackTrace();
	}

So hat man das vor der Scanner Klasse gemacht
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Zwei Listen vergleichen Allgemeine Java-Themen 7
M doppelt verkettete Listen Allgemeine Java-Themen 2
L Listen Allgemeine Java-Themen 3
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
E Listen in Java aneinanderfügen, subtrahieeren usw. Allgemeine Java-Themen 14
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
S Intressante Benchmark-Ergebnisse mit Listen. Weiss jemand wie man diese erklaeren kann? Allgemeine Java-Themen 15
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
P Listen sortieren Allgemeine Java-Themen 1
RalleYTN Collections Verständnisfrage zu Objektreferenzen in Listen Allgemeine Java-Themen 5
C Listen Allgemeine Java-Themen 1
M liste von listen anders ausgeben Allgemeine Java-Themen 1
W Sortierte Listen - Methode suchen Allgemeine Java-Themen 17
W Sortierte Listen mit Polymorphismus Allgemeine Java-Themen 6
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
S Permutation und Listen Allgemeine Java-Themen 2
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
F JAXB / Listen durchlaufen Allgemeine Java-Themen 17
T Drucken von variabel langen Listen (es kommen nur leere Seiten raus) Allgemeine Java-Themen 2
F Vergleich zweier Listen Allgemeine Java-Themen 4
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
D variabler Listen name Allgemeine Java-Themen 3
V Drucken von Listen Allgemeine Java-Themen 6
S Doppelte Werte in Listen,Vectoren etc suchen Allgemeine Java-Themen 2
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
M Addieren von Listen Allgemeine Java-Themen 2
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S Mehrere Listen ineinander verschachteln Allgemeine Java-Themen 22
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
H Listen Allgemeine Java-Themen 5
G Datenstruktur: LISTEN Allgemeine Java-Themen 7
J Verschachtelte ListIteratoren um in zwei Listen hin und herzugehen Allgemeine Java-Themen 5
C Problem Methoden, Klassen, Listen Allgemeine Java-Themen 27
K Listen,Bäume,Mengen Allgemeine Java-Themen 3
S Hinzufügen von Elementen zu Listen Allgemeine Java-Themen 4
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
D Listen / Datenstrukturen und ein blutiger Anfänger Allgemeine Java-Themen 7
J Zwei sortierte Listen zusammenfassen Allgemeine Java-Themen 8
T Problem mit Listen Allgemeine Java-Themen 8
B binarysearch bei listen mit klassen Allgemeine Java-Themen 4
F Problem mit Java Listen Allgemeine Java-Themen 4
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
C Listen in Java. Anehängter Code nicht ganz klar Allgemeine Java-Themen 19
L Doppelt Verkettete Listen Allgemeine Java-Themen 6
E Verkettete Listen Allgemeine Java-Themen 5
M objekt mit listen Allgemeine Java-Themen 5
G Domainen crawlen & Domainnamen listen -> LANGSAM! Allgemeine Java-Themen 19
M Listen Problem! Allgemeine Java-Themen 26
M doppelt verkettete Listen? Allgemeine Java-Themen 5
M Serialisierte listen ausgeben? Allgemeine Java-Themen 6
F 2 Varianten für synchronisierten Zugriff auf Listen Allgemeine Java-Themen 2
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
G Synchronisierte Listen. ein Graus Allgemeine Java-Themen 4
M Verknüpfung von Listen Allgemeine Java-Themen 3
S Frage zu ArrayList mit Listen Allgemeine Java-Themen 8
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
D Listen Allgemeine Java-Themen 4
M sortierte listen Allgemeine Java-Themen 5
I Doppelt verkette Listen Allgemeine Java-Themen 2
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
M Thymeleaf th value und th text Allgemeine Java-Themen 1
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
_user_q Eingegebenen Text wiederholt schreiben lassen Allgemeine Java-Themen 9
G Darstellung von Text auf MapContext von GeoTools Allgemeine Java-Themen 2
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
izoards Bestimmter Text aus PDF extrahieren Allgemeine Java-Themen 3
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
L Text filtern Allgemeine Java-Themen 1
Bluedaishi TEXT Kodierung Allgemeine Java-Themen 3
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
S Ini Text aus String parsen Allgemeine Java-Themen 1
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
I Text suchen und ersetzen im Word Dokument Allgemeine Java-Themen 3
windl Text mining / deep learning Allgemeine Java-Themen 0
I Text aus Input-Box entnehmen und zuweisen Allgemeine Java-Themen 1
KeexZDeveoper Text Mining Allgemeine Java-Themen 3
L Input/Output Wie kann man in der Konsole einen Text farbig ausgeben z.b in grün Allgemeine Java-Themen 6
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
A Datenexport (Text und Draw) Allgemeine Java-Themen 1
L Text von txt auf JTextArea Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T itext: text in ein textfeld hinzufügen Allgemeine Java-Themen 2
B Farbiger Text in der Konsole Allgemeine Java-Themen 1
K Pdf mit dynamischem Text mit iText Allgemeine Java-Themen 0
D Text Analyzer Allgemeine Java-Themen 2
RalleYTN Audiodatein(.ogg/.wav) in Text konvertieren Allgemeine Java-Themen 0
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben