# Doppeltverkettete Listen + Text



## Psynox (2. Jan 2011)

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 (2. Jan 2011)

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 (2. Jan 2011)

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"?)
> ...



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:


```
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 (2. Jan 2011)

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.

```
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.

```
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?


----------



## Psynox (2. Jan 2011)

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 (2. Jan 2011)

```
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


----------

