Hallo,
ich habe ein kleines Verständnisproblem mit meinem Programm.
Ich habe mir eine Methode geschrieben, die aus einer Datei jede Zeile ausließt und diese Zeile dann in einem Element eines
abspeichert. Eine weitere Methode soll sich nun jede Zeile vornehmen und jedes einzelne Wort in einem Mehrdimensionalen Vektor der Art
speichern. Diese Methode sieht folgendermaßen aus.
Wenn ich mir nun aber meinen mehrdimensionalen Vector split_file_content ansehe, so steht in JEDEM Element des äußeren Vectors (sooft wie die Datei Zeilen hatte) die letzte Zeile der Datei in Wörter gebrochen. Offensichtlich schreibt die Methode add(buffer) nicht nur in ein neues Element am Ende des äußeren Vectors einen Vector <String> sondern auch in alle die davor bereits existierten.
Frage: WARUM? ???:L
Ein Beispiel. Wenn meine Datei folgendermaßen aussieht:
1Zeile 1
2Zeile 2
3Zeile 3
4Zeile 4
5Zeile 5
Und ich mir dann immer abwechselnd eine Zeile, dann das erste Wort dieser Zeile, die nächste Zeile, das erste Wort dieser Zeile etc. ausgeben lasse, sollte die Ausgabe:
1Zeile 1
1Zeile
2Zeile 2
2Zeile
3Zeile 3
3Zeile
4Zeile 4
4Zeile
5Zeile 5
5Zeile
sein. Ich erhalte aber:
1Zeile 1
5Zeile
2Zeile 2
5Zeile
3Zeile 3
5Zeile
4Zeile 4
5Zeile
5Zeile 5
5Zeile
ich habe ein kleines Verständnisproblem mit meinem Programm.
Ich habe mir eine Methode geschrieben, die aus einer Datei jede Zeile ausließt und diese Zeile dann in einem Element eines
Java:
Vector <String>
abspeichert. Eine weitere Methode soll sich nun jede Zeile vornehmen und jedes einzelne Wort in einem Mehrdimensionalen Vektor der Art
Java:
Vector <Vector <String>>
speichern. Diese Methode sieht folgendermaßen aus.
Java:
private Vector <String> file_content =new Vector <String> ();
private Vector <Vector <String>> split_file_content = new Vector <Vector <String>> ();
// file_content wurde bespielt, keine Probleme hier
public void setsplit_file_content(){
Vector <String> buffer = new Vector <String> (); // Ein String buffer
String line;
int i = 0, j;
while(i < file_content.size()){ //Für jede Zeile der Anfangsdatei
buffer.clear();
j = 0;
line = file_content.get(i);
String[] words = new String[1024]; // Länger sollte die Zeile nicht sein
try{
words = (line.split("\\s"));} // Schreibt in jedes Element ein Wort
catch(PatternSyntaxException e){System.out.println("split() did not work");}
while(j < words.length) // macht quasi aus dem String-Array einen Vektor vom gewünschten Typ
{
buffer.add(words[j]);
j++;
}
split_file_content.add(buffer); // !!!!!Hier ist der Fehler (siehe unten)!!!!!
i++;
}
}
Wenn ich mir nun aber meinen mehrdimensionalen Vector split_file_content ansehe, so steht in JEDEM Element des äußeren Vectors (sooft wie die Datei Zeilen hatte) die letzte Zeile der Datei in Wörter gebrochen. Offensichtlich schreibt die Methode add(buffer) nicht nur in ein neues Element am Ende des äußeren Vectors einen Vector <String> sondern auch in alle die davor bereits existierten.
Frage: WARUM? ???:L
Ein Beispiel. Wenn meine Datei folgendermaßen aussieht:
1Zeile 1
2Zeile 2
3Zeile 3
4Zeile 4
5Zeile 5
Und ich mir dann immer abwechselnd eine Zeile, dann das erste Wort dieser Zeile, die nächste Zeile, das erste Wort dieser Zeile etc. ausgeben lasse, sollte die Ausgabe:
1Zeile 1
1Zeile
2Zeile 2
2Zeile
3Zeile 3
3Zeile
4Zeile 4
4Zeile
5Zeile 5
5Zeile
sein. Ich erhalte aber:
1Zeile 1
5Zeile
2Zeile 2
5Zeile
3Zeile 3
5Zeile
4Zeile 4
5Zeile
5Zeile 5
5Zeile