Hallo Zusammen,
ich versuche seit einigen Tagen ein Programm zu schreiben, welches mit erlaubt ein zwei dimensionales Array zu verwalten. Meine Grundidee ist das dieses Programm drei Dinge kann:
1) ein in einem Textfile abgelegtes Array einlesen
2) das vorhandene Array um eine Zeile mit neuen Eingaben erweitern
3) das erweiterte Array in einer .txt-Datei ablegen.
Die werte für die Dimensionen des Arrays sind auch aus txt Dateien entnommen. und soll mit einem Wert von null (also einer zeile) und einem Wert von 2(also 3 spalten) starten. beim vergrößern soll immer ein neuer datensatz angelegt werden ( also nur eine erhöhung der Zeilenanzahl stattfinden) und der neue Wert soll an das untere Ende des Arrays geschrieben werden.
Mein aktueller code sieht für die drei geschriebenen Methoden folgendermaßen aus:
1)
[CODE lang="java" title="loadArray"]public void loadArray()
{
//Array erzeugen
try {
BufferedReader br = new BufferedReader(new FileReader(arraysWH.getArraySizePath()));
BufferedReader bx = new BufferedReader(new FileReader(arraysWH.getCounterPath()));
try {
arraysWH.setAnzahlZeilenMasterData(Integer.parseInt(bx.readLine()));
arraysWH.setAnzahlSpaltenMasterData(Integer.parseInt(br.readLine()));
br.close();
bx.close();
arraysWH.masterData= new String[arraysWH.getAnzahlZeilenMasterData()][arraysWH.getAnzahlSpaltenMasterData()];
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Daten aus txt laden
System.out.println("Lade Daten aus txt-File");
Scanner in;
try {
in = new Scanner(new FileReader(arraysWH.getMasterDataPath()));
int lineCount = 0;
try{
while (in.hasNextLine()) {
String[] currentLine = in.nextLine().trim().split(",");
for (int i = 0; i <arraysWH.masterData.length; i++) {
arraysWH.masterData[lineCount] = currentLine;;
System.out.println(arraysWH.masterData[lineCount]+",");
}
lineCount++;
}
System.out.println(arraysWH.masterData.length+" Datensätze geladen");
}
catch(ArrayIndexOutOfBoundsException ex)
{
System.out.println(arraysWH.masterData.length+" Datensätze geladen(müssten vermutlich immer null sein)");
}
in.close();
System.out.println();
System.out.println("Laden abgeschlossen");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.status("Ende Laden");
} [/CODE]
2)
3)
[CODE lang="java" title="save Array"]public void saveArray()
{
try {
PrintWriter bw = new PrintWriter(new FileWriter(arraysWH.getMasterDataPath()));
PrintWriter bx = new PrintWriter(new FileWriter(arraysWH.getCounterPath()));
bx.print(arraysWH.masterData.length);
int s=arraysWH.masterData.length;
System.out.println(s);
for (int i = 0; i<arraysWH.masterData.length; i++)
{
for(int j = 0; j<arraysWH.masterData[0].length; j++)
{
bw.print(arraysWH.masterData[j]+ ",");
}
bw.println();
}
bw.close();
bx.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}[/CODE]
mein Problem dabei ist, das ich vermutlich irgendwo die zuweisungen verbastel, sodass am Ende nicht mehr das herauskommt was eigentlich soll. Aus dem Grund habe ich angefangen den Code mit so vielen kommentaren zu versehen, um die aktuellen zustände der variablen zu den entsprechenden Zeitpunkten zu sehen ( das debuggen funktioniert bei diesem Projekt komischerweise nicht, zumindest sind alle bedienelemente ausgegraut)
beim ersten Durchlauf des Programms bekomme ich eine ganz normale ausgabe und auch das speichern funktioniert:
Hans,schlafen,Audi,
beim zweiten Durchlauf ist die ausgabe die folgende:
Hans,null,null,
Peter,sitzen,BMW,
beim dritten:
Hans,null,null,
Peter,sitzen,null,
Klaus,gehen,Dacia,
beim vierten:
Hans,null,null,
Peter,sitzen,null,
Klaus,gehen,Dacia,
Peter,schlafen,Dacia,
und von dem fünften an:
Hans,null,null,
null,null,null,
null,null,null,
null,null,null,
Hans,schlafen,Audi,
das Problem wird vermutlich in der Zuweisung der Array Dimensionen liegen, allerdings finde ich meinen Fehler einfach nicht und hatte gehofft das vielleicht jemand der in der richtung etwas versierter ist (vielleicht sogar mit wenig aufwand) den grund für die fehlerhafte ausgabe aufzeigen kann.
eine andere sache die mir aufgefallen ist, die ich allerdings bis jetzt nur so umgehen konnte ist die tatsache das ich als Zeilenanzahl den Wert 3 lade und nicht wie eigentlich vorgesehen den Wert 2.
falls weitere Codeschnipsel gewünscht sind kann ich diese gerne nachliefern, aber vielleicht ist das problem ja garnicht so kompliziert wie ich es gerade denke.
Vielen Dank im vorhinein schon einmal.
ich versuche seit einigen Tagen ein Programm zu schreiben, welches mit erlaubt ein zwei dimensionales Array zu verwalten. Meine Grundidee ist das dieses Programm drei Dinge kann:
1) ein in einem Textfile abgelegtes Array einlesen
2) das vorhandene Array um eine Zeile mit neuen Eingaben erweitern
3) das erweiterte Array in einer .txt-Datei ablegen.
Die werte für die Dimensionen des Arrays sind auch aus txt Dateien entnommen. und soll mit einem Wert von null (also einer zeile) und einem Wert von 2(also 3 spalten) starten. beim vergrößern soll immer ein neuer datensatz angelegt werden ( also nur eine erhöhung der Zeilenanzahl stattfinden) und der neue Wert soll an das untere Ende des Arrays geschrieben werden.
Mein aktueller code sieht für die drei geschriebenen Methoden folgendermaßen aus:
1)
[CODE lang="java" title="loadArray"]public void loadArray()
{
//Array erzeugen
try {
BufferedReader br = new BufferedReader(new FileReader(arraysWH.getArraySizePath()));
BufferedReader bx = new BufferedReader(new FileReader(arraysWH.getCounterPath()));
try {
arraysWH.setAnzahlZeilenMasterData(Integer.parseInt(bx.readLine()));
arraysWH.setAnzahlSpaltenMasterData(Integer.parseInt(br.readLine()));
br.close();
bx.close();
arraysWH.masterData= new String[arraysWH.getAnzahlZeilenMasterData()][arraysWH.getAnzahlSpaltenMasterData()];
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Daten aus txt laden
System.out.println("Lade Daten aus txt-File");
Scanner in;
try {
in = new Scanner(new FileReader(arraysWH.getMasterDataPath()));
int lineCount = 0;
try{
while (in.hasNextLine()) {
String[] currentLine = in.nextLine().trim().split(",");
for (int i = 0; i <arraysWH.masterData.length; i++) {
arraysWH.masterData[lineCount] = currentLine;;
System.out.println(arraysWH.masterData[lineCount]+",");
}
lineCount++;
}
System.out.println(arraysWH.masterData.length+" Datensätze geladen");
}
catch(ArrayIndexOutOfBoundsException ex)
{
System.out.println(arraysWH.masterData.length+" Datensätze geladen(müssten vermutlich immer null sein)");
}
in.close();
System.out.println();
System.out.println("Laden abgeschlossen");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.status("Ende Laden");
} [/CODE]
2)
Code:
]public void extendArray()
{
System.out.println("Starte Arrayerweiterung");
System.out.println("Anzahl Zeilen: "+arraysWH.getAnzahlZeilenMasterData());
System.out.println("Anzahl Spalten: "+arraysWH.getAnzahlSpaltenMasterData());
arraysWH.setAnzahlZeilenIntermediateData(arraysWH.getAnzahlZeilenMasterData()+1);
arraysWH.setAnzahlSpaltenIntermediateData(arraysWH.getAnzahlSpaltenMasterData());
arraysWH.intermediateData = new String[arraysWH.getAnzahlZeilenIntermediateData()][arraysWH.getAnzahlSpaltenIntermediateData()];
//Daten zwischenspeichern
System.out.println("############################################");
System.out.println("Starte Speichervorgang");
System.out.println("masterDatalength/anzahl Zeilen: "+arraysWH.masterData.length);
//System.out.println("masterDatalength/Anzahl Spalten: "+arraysWH.masterData[0].length);
System.out.println("intermediateDatalength/anzahl Zeilen: "+arraysWH.intermediateData.length);
System.out.println("intermediateDatalength/Anzahl Spalten: "+arraysWH.intermediateData[0].length);
for (int i=0;i<arraysWH.masterData.length;i++)
{
for (int j=0;j<arraysWH.getAnzahlSpaltenMasterData();j++)
{
arraysWH.intermediateData[i][j]=arraysWH.masterData[i][j];
System.out.println("Wert übertragen spalte: "+j+" Zeile: "+i+" "+arraysWH.intermediateData[i][j]);
}
System.out.println("Zeilenwechsel");
}
arraysWH.masterData=null;
System.out.println("Speichervorgang abgeschlossen");
System.out.println("############################################");
//Arraygrößen überprüfen
arraysWH.masterData = new String[arraysWH.getAnzahlZeilenIntermediateData()][arraysWH.getAnzahlSpaltenIntermediateData()];
System.out.println("intermediate Zeilen: "+arraysWH.intermediateData.length);
System.out.println("intermediate Spalten: "+arraysWH.intermediateData[0].length);
//Daten zufügen
System.out.println("Starte hinzufügen von Daten");
arraysWH.intermediateData[arraysWH.getAnzahlZeilenMasterData()][0]=arraysWH.getString1Value();
arraysWH.intermediateData[arraysWH.getAnzahlZeilenMasterData()][1]=arraysWH.getString2Value();
arraysWH.intermediateData[arraysWH.getAnzahlZeilenMasterData()][2]=arraysWH.getString3Value();
System.out.println("Zufügen von Daten abgeschlossen");
System.out.println("############################################");
System.out.println(arraysWH.intermediateData[0][0]);
System.out.println(arraysWH.intermediateData[0][1]);
System.out.println(arraysWH.intermediateData[0][2]);
System.out.println(arraysWH.masterData[0][0]);
System.out.println(arraysWH.masterData[0][1]);
System.out.println(arraysWH.masterData[0][2]);
//Daten zurückspeichern
for (int i=0;i<arraysWH.getAnzahlZeilenIntermediateData();i++)
{
for (int j=0;j<arraysWH.getAnzahlSpaltenIntermediateData();j++)
{
arraysWH.masterData[i][j]=arraysWH.intermediateData[i][j];
}
}
System.out.println(arraysWH.masterData[0][0]);
System.out.println(arraysWH.masterData[0][1]);
System.out.println(arraysWH.masterData[0][2]);
//zwischenspeicher löschen
arraysWH.intermediateData=null;
}
3)
[CODE lang="java" title="save Array"]public void saveArray()
{
try {
PrintWriter bw = new PrintWriter(new FileWriter(arraysWH.getMasterDataPath()));
PrintWriter bx = new PrintWriter(new FileWriter(arraysWH.getCounterPath()));
bx.print(arraysWH.masterData.length);
int s=arraysWH.masterData.length;
System.out.println(s);
for (int i = 0; i<arraysWH.masterData.length; i++)
{
for(int j = 0; j<arraysWH.masterData[0].length; j++)
{
bw.print(arraysWH.masterData[j]+ ",");
}
bw.println();
}
bw.close();
bx.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}[/CODE]
mein Problem dabei ist, das ich vermutlich irgendwo die zuweisungen verbastel, sodass am Ende nicht mehr das herauskommt was eigentlich soll. Aus dem Grund habe ich angefangen den Code mit so vielen kommentaren zu versehen, um die aktuellen zustände der variablen zu den entsprechenden Zeitpunkten zu sehen ( das debuggen funktioniert bei diesem Projekt komischerweise nicht, zumindest sind alle bedienelemente ausgegraut)
beim ersten Durchlauf des Programms bekomme ich eine ganz normale ausgabe und auch das speichern funktioniert:
Hans,schlafen,Audi,
beim zweiten Durchlauf ist die ausgabe die folgende:
Hans,null,null,
Peter,sitzen,BMW,
beim dritten:
Hans,null,null,
Peter,sitzen,null,
Klaus,gehen,Dacia,
beim vierten:
Hans,null,null,
Peter,sitzen,null,
Klaus,gehen,Dacia,
Peter,schlafen,Dacia,
und von dem fünften an:
Hans,null,null,
null,null,null,
null,null,null,
null,null,null,
Hans,schlafen,Audi,
das Problem wird vermutlich in der Zuweisung der Array Dimensionen liegen, allerdings finde ich meinen Fehler einfach nicht und hatte gehofft das vielleicht jemand der in der richtung etwas versierter ist (vielleicht sogar mit wenig aufwand) den grund für die fehlerhafte ausgabe aufzeigen kann.
eine andere sache die mir aufgefallen ist, die ich allerdings bis jetzt nur so umgehen konnte ist die tatsache das ich als Zeilenanzahl den Wert 3 lade und nicht wie eigentlich vorgesehen den Wert 2.
falls weitere Codeschnipsel gewünscht sind kann ich diese gerne nachliefern, aber vielleicht ist das problem ja garnicht so kompliziert wie ich es gerade denke.
Vielen Dank im vorhinein schon einmal.