Hallo,
ich haette gute Lust gehabt, das Thema Java und Esotherik zu nennen, aber ich denke, dann kann mir garantiert keiner mehr helfen. Mein Problem ist allerdings alles andere als einfach zu erklaeren.
Das Programm:
Ich will mit einem BufferedReader und dessen Methode getLine() eine Datei zeilenweise einlesen.
Die Zeilen bestehen aus per ';' getrennten Zahlen.
in einer while-Schleife soll dann jede Zahl als ein Vectorelement in den Vector vecLine geschrieben werden.
Code:
szInputLine = ist ein string der die Zeile enthaelt.
myTexToo = ist eine Klasse, die wiederum ueber Vektoren verfuegt und diese per getter und setter verwalten sollte, was das Problem ist.
Wirklich wichtig sind nur die zwei markierten Stellen mit vecLine und dem setter von vecColNames, den Rest habe ich eher so noch da gelassen.
Dazu gehoert die Klasse TextTools mit dem Object myTexToo in der Klasse der obigen Funktion.
Problem:
vecColNames sollte nur einmal eingelesen werden. Es sollte genau die 0. Zeile sein.
Was passiert ist unglaublich:
vecColNames wird ueber den setter einmal eingelesen und dieser wird nicht mehr im weitern Programm aufgerufen.
Allerdings, aendert sich beim weiteren Einlesen von vecLine, an genau der obigen Stelle auch der Inhalt von myTexToo.vecColName.
Wenn ich vor und nach dieser Zeile den Vector vecColName ausgeben lasse, wird er genau mit demselben befuellt, was in vecLine und zwar nur da reinsollte (davor wird er sogar geleert?!?).
Was ist da los? Ich habe versucht vecColNames umzubenennen, da ich dachte vielleicht gibts ja javaintern nen Doppelgaenger, hat aber nix gebracht. Darf man evtl in einem JavaProgramm nur einen Vector haben?????
Die Hauptfrage:
Warum befuellt sich vecColName, wenn vecLine gefuellt wird?
Ist dieses Verhalten normal? ich habe versucht mit static rumzumache, hat alles nix gebracht...
ich haette gute Lust gehabt, das Thema Java und Esotherik zu nennen, aber ich denke, dann kann mir garantiert keiner mehr helfen. Mein Problem ist allerdings alles andere als einfach zu erklaeren.
Das Programm:
Ich will mit einem BufferedReader und dessen Methode getLine() eine Datei zeilenweise einlesen.
Die Zeilen bestehen aus per ';' getrennten Zahlen.
in einer while-Schleife soll dann jede Zahl als ein Vectorelement in den Vector vecLine geschrieben werden.
Code:
szInputLine = ist ein string der die Zeile enthaelt.
myTexToo = ist eine Klasse, die wiederum ueber Vektoren verfuegt und diese per getter und setter verwalten sollte, was das Problem ist.
Wirklich wichtig sind nur die zwei markierten Stellen mit vecLine und dem setter von vecColNames, den Rest habe ich eher so noch da gelassen.
Code:
...
public void getFile(String szFilename){
System.out.println("getFile");
// streams
BufferedReader brInput = null;
// containers
Vector vecLine = new Vector(0);
String szInputLine = "", szToken = ";", szTemp = "";
// variables
int iFirstLines = 0;
boolean bWrite = false;
// initialisation
try{
brInput = loadBufferedReader(szFilename);
while ((szInputLine = brInput.readLine()) != null){
szTemp = "";
szInputLine += szToken;
vecLine.removeAllElements();
//******* read the line: *******
while(szInputLine.length() > 0){
if(szInputLine.startsWith(szToken)){
//// hier passiert es:
vecLine.addElement(szTemp);
/////
szTemp = "";
}else{
szTemp += String.valueOf(szInputLine.charAt(0));
}
szInputLine = szInputLine.substring(1);
}
//******* cut off *******
try{
if(vecLine.size() <= 1){
// line is empty
bWrite = false;
}else if(iFirstLines < 2){
bWrite = false;
if(iFirstLines < 1){
// line 0: read coloumn names
System.out.println("line 0");
myTexToo.setColNames(vecLine);
///// sollte eben nur EINMAL fuer den Vector der 0. Zeile
//// in den Vector vecColNames der Klasse myTexToo schreibem
}else{
// line 1: read lib sum
System.out.println("line 1");
// save whole line LibSum
myTexToo.setLibSum(vecLine);
// parameters: iFirstColumn and iLastColumn
myTexToo.findFirstColumn(vecLine);
myTexToo.findLastColumn(vecLine);
// work with parameters
myTexToo.setSmallestLib(vecLine);
}
iFirstLines++;
}else{
// line > 1: do data
System.out.println("line >1");
bWrite = myTexToo.checkLastColumn(vecLine);
}
}catch(NumberFormatException except1){
System.out.println("NumberFormatException");
bWrite = false;
}catch(IndexOutOfBoundsException except2){
System.out.println("IndexOutOfBoundsException");
bWrite = false;
}
//******* write *******
if(bWrite){
myTable.addLine(vecLine);
}
}// one more LINE done !!!
brInput.close();
}catch(Exception parseExcept){
System.out.println("ERROR :" + parseExcept);
parseExcept.printStackTrace();
}
}
...
Dazu gehoert die Klasse TextTools mit dem Object myTexToo in der Klasse der obigen Funktion.
Code:
...
public void setColNames( Vector vecTemp){
vecColNames = vecTemp;
}
public Vector getColNames(){
return vecColNames;
}
...
Problem:
vecColNames sollte nur einmal eingelesen werden. Es sollte genau die 0. Zeile sein.
Was passiert ist unglaublich:
vecColNames wird ueber den setter einmal eingelesen und dieser wird nicht mehr im weitern Programm aufgerufen.
Allerdings, aendert sich beim weiteren Einlesen von vecLine, an genau der obigen Stelle auch der Inhalt von myTexToo.vecColName.
Wenn ich vor und nach dieser Zeile den Vector vecColName ausgeben lasse, wird er genau mit demselben befuellt, was in vecLine und zwar nur da reinsollte (davor wird er sogar geleert?!?).
Was ist da los? Ich habe versucht vecColNames umzubenennen, da ich dachte vielleicht gibts ja javaintern nen Doppelgaenger, hat aber nix gebracht. Darf man evtl in einem JavaProgramm nur einen Vector haben?????
Die Hauptfrage:
Warum befuellt sich vecColName, wenn vecLine gefuellt wird?
Ist dieses Verhalten normal? ich habe versucht mit static rumzumache, hat alles nix gebracht...