ich hab eine Textdatei wo sich ein Labyrinth befindet. Diese Datei muss ich in einen geschachtelten Array speichern. Hab leider kann Plan wie ich das machen soll.
Wie kann ich die Länge des Arrays so bestimmen, dass ich es nicht initialisieren muss? Also die Länge(Zeilen und Spalten) soll von der Textdatei übernommen werden.
Du müsstest wissen wieviele Zeilen deine Datei hat, das kannst du aber nicht einfach so herauslesen.
Da bleibt dir nur die Möglichkeit einmal komplett die Datei einzulesen und die Anzahl der Zeilen zu zählen. Danach erstellst du das Array und ließt dein Labyrinth ein.
Alternativ nimmst du eine List, die kann beliebig groß werden.
Ich habe das Problem mit Zeilen und Spalten zählen gelöst, jetzt habe ich das Problem, das der Inhalt der Datei nur in Fragezeichen (?) ausgegeben wird. Was kann ich tun???
Das Problem ist, dass du ja schon alles eingelesen hast. Du musst irgendwie wieder an die erste Position springen, denn da wo du zu lesen versuchst, ist das Dokument eigentlich zu Ende. ^^
Das hättest du gemerkt, wenn du beachtet hättest, dass der Rückgabewert von read() -1 ist, falls die Datei ihr Ende erreicht hat!
Java:
BufferedReader br =newBufferedReader(fr);
br.mark(/* irgendwas großes*/);...
br.reset();for(int i =0; i < labyrinth.length; i++){
ArrayList<char[]> list =newArrayList<>():BufferedReader r =newBufferedReader(newFileReader("c:\\file.txt"));String line = r.readLine();while(line !=null){
list.add(line.toCharArray());
line = r.readLine();}
r.close();char[][] array =(char[][])list.toArray();
Das Problem ist, dass du ja schon alles eingelesen hast. Du musst irgendwie wieder an die erste Position springen, denn da wo du zu lesen versuchst, ist das Dokument eigentlich zu Ende. ^^
Das hättest du gemerkt, wenn du beachtet hättest, dass der Rückgabewert von read() -1 ist, falls die Datei ihr Ende erreicht hat!
Java:
BufferedReader br =newBufferedReader(fr);
br.mark(/* irgendwas großes*/);...
br.reset();for(int i =0; i < labyrinth.length; i++){
Na schau mal: Du benutzt readLine, um die Zeilen zu zählen. Dabei wird aber schon die ganze Datei abgeklappert, wenn du später lesen willst mit
Code:
#read
, ist er schon am Ende der Datei angelangt.
Dafür gibt es die Funktionen
Code:
#mark
und
Code:
#reset
. Mit
Code:
#mark
markierst du den Punkt, an den du später zurückspringen willst. Das baust du also ganz am Anfang ein, denn dorthin willst du wieder zurück. Wenn du mit dem eigentlichen Einlesen der Zeichen beginnen möchtest, resettest du das ganze dann, um dorthin wieder zurückzukehren. Alternativ kannst du auch deinen File und BufferedReader einfach noch mal neu initialisieren.
Die Textdatei wird jetzt nicht vollständig ausgegeben, genauer gesagt die letzte zwei Zeilen. Die Funktionen mark() und reset() haben funktioniert. Was kann da noch falsch sein???
Ausserdem musst du Zeilenumbrüche gesondert behandeln.
Die Zeile
[Java]labyrinth[j] = (char) br.read();[/code]
überprüft nicht ob br.read() einen Zeilenumbruch zurückliefert. D.h. '\n' oder '\r'. Die Zeilenumbrüche speicherst du dann in deinem Array ab.