Hallo zusammen,
ich habe im Unterricht eine Aufgabe bekommen, Conways GameofLife zu programmieren.
Ich selber beschäftige mich erst seit kurzem mit Eclipse und der Programmierung generell und komme an früher Stelle meiner Arbeit leider nicht mehr weiter.
Die Aufgabenstellung:
- Einlesen einer Textdatei (mit X--> Symbol für tote Zellen und O--> Symbol für lebende Zellen) und Überführung der Daten in ein 2 dimensionales Array. Die Textdatei besteht nur aus einer gewissen Menge an Symbolen, beim Einlesen soll es eine Fehlermeldung geben, wenn die Matrix-Form nicht rechteckig ist,
es andere Symbole als X und O gibt oder die gewünschte Matrixgröße 1x1-50x50 nicht gegeben ist.
X und O symbolisieren Zellen auf einem rechteckigen Spielfeld, die je nach Eingabe den Zustand "Tot" oder "Lebendig" haben, welcher sich über mehrere Generationen unter Einflussnahme von 4 Regeln verändert. Es sollen so viele Generationen durchlaufen werden, bis ein endlicher Zustand (Alle Zellen tot oder lebendig bzw eine Endlosschleife) erreicht worden ist. Dieser endliche Zustand soll dann in einer Textdatei wieder ausgegeben werden.
Zu meinem Problem: Ich habe das Einlesen der Textdatei bereits fertig, sie wird auf Richtigkeit geprüft und in der Console ausgegeben. Dafür lasse ich in einer Schleife Zeilenlänge und Zeilenanzahl zählen und erschaffe mit diesen Daten ein 2 dimensionales Array, in welchem ich die Daten abspeichern möchte (Zeichen für Zeichen). Anbei der Code:
Anfangszustand:
XOOOO
XOOOX
OXXXO
OXXXX
OXXXX
OXXXX
[JAVA=42]
//......... (Lediglich die Prüfung der Dateirichtigkeit und die Counter fürs Array
int hallo1[][] = new int[zeilennummer][feldbreite];
// System.out.println(hallo1.length);
File datei2 = new File("c:\\Testdatei2.txt");
int c;
int zeile = 1;
int zeichen = 0;
try {
FileReader f = new FileReader(datei2);
while ((c = f.read()) != -1) {
if ((zeichen >= feldbreite)) {
zeile++;
zeichen = 1;
} else {
if (c == 88||c==79) {
zeichen++;hallo1[zeile - 1][zeichen -1] = c;
} else {
if (c != 79||c!=88) {
zeichen = zeichen;
}
}
}
if (zeile > zeilennummer) {
break;
}
}
for (int i = 0; i < zeilennummer; i++) {
for (int j = 0; j < feldbreite; j++) {
System.out.println(i + " " + j + " " + hallo1[j]);
}
}
f.close();
} catch (IOException e) {
System.out.println("Fehler: " + e.toString());
}
}
}
[/code]
AUSGABE:
0 0 88
0 1 79
0 2 79
0 3 79
0 4 79
1 0 0
1 1 88
1 2 79
1 3 79
1 4 79
2 0 0
2 1 79
2 2 88
2 3 88
2 4 88
3 0 0
3 1 79
3 2 88
3 3 88
3 4 88
4 0 0
4 1 79
4 2 88
4 3 88
4 4 88
5 0 0
5 1 79
5 2 88
5 3 88
5 4 88
Wie ihr seht, arbeite ich mit dem ASCII-Code und versuche so, nur die X und O in das Array zu überführen. Leider erzeugt der Reader beim Zeilenwechsel noch die Int-Werte 10 und 13, weshalb ich es nicht hinbekomme, das Array korrekt einzulesen. Vielleicht habt ihr dazu ja eine Idee, sollte es eine Alternatividee zu meinem Vorgehen sein, bin ich auch dafür immer offen und sehr dankbar.
Ich hoffe, dass ihr dafür eine Idee habt
Beste Grüße
ich habe im Unterricht eine Aufgabe bekommen, Conways GameofLife zu programmieren.
Ich selber beschäftige mich erst seit kurzem mit Eclipse und der Programmierung generell und komme an früher Stelle meiner Arbeit leider nicht mehr weiter.
Die Aufgabenstellung:
- Einlesen einer Textdatei (mit X--> Symbol für tote Zellen und O--> Symbol für lebende Zellen) und Überführung der Daten in ein 2 dimensionales Array. Die Textdatei besteht nur aus einer gewissen Menge an Symbolen, beim Einlesen soll es eine Fehlermeldung geben, wenn die Matrix-Form nicht rechteckig ist,
es andere Symbole als X und O gibt oder die gewünschte Matrixgröße 1x1-50x50 nicht gegeben ist.
X und O symbolisieren Zellen auf einem rechteckigen Spielfeld, die je nach Eingabe den Zustand "Tot" oder "Lebendig" haben, welcher sich über mehrere Generationen unter Einflussnahme von 4 Regeln verändert. Es sollen so viele Generationen durchlaufen werden, bis ein endlicher Zustand (Alle Zellen tot oder lebendig bzw eine Endlosschleife) erreicht worden ist. Dieser endliche Zustand soll dann in einer Textdatei wieder ausgegeben werden.
Zu meinem Problem: Ich habe das Einlesen der Textdatei bereits fertig, sie wird auf Richtigkeit geprüft und in der Console ausgegeben. Dafür lasse ich in einer Schleife Zeilenlänge und Zeilenanzahl zählen und erschaffe mit diesen Daten ein 2 dimensionales Array, in welchem ich die Daten abspeichern möchte (Zeichen für Zeichen). Anbei der Code:
Anfangszustand:
XOOOO
XOOOX
OXXXO
OXXXX
OXXXX
OXXXX
[JAVA=42]
//......... (Lediglich die Prüfung der Dateirichtigkeit und die Counter fürs Array
int hallo1[][] = new int[zeilennummer][feldbreite];
// System.out.println(hallo1.length);
File datei2 = new File("c:\\Testdatei2.txt");
int c;
int zeile = 1;
int zeichen = 0;
try {
FileReader f = new FileReader(datei2);
while ((c = f.read()) != -1) {
if ((zeichen >= feldbreite)) {
zeile++;
zeichen = 1;
} else {
if (c == 88||c==79) {
zeichen++;hallo1[zeile - 1][zeichen -1] = c;
} else {
if (c != 79||c!=88) {
zeichen = zeichen;
}
}
}
if (zeile > zeilennummer) {
break;
}
}
for (int i = 0; i < zeilennummer; i++) {
for (int j = 0; j < feldbreite; j++) {
System.out.println(i + " " + j + " " + hallo1[j]);
}
}
f.close();
} catch (IOException e) {
System.out.println("Fehler: " + e.toString());
}
}
}
[/code]
AUSGABE:
0 0 88
0 1 79
0 2 79
0 3 79
0 4 79
1 0 0
1 1 88
1 2 79
1 3 79
1 4 79
2 0 0
2 1 79
2 2 88
2 3 88
2 4 88
3 0 0
3 1 79
3 2 88
3 3 88
3 4 88
4 0 0
4 1 79
4 2 88
4 3 88
4 4 88
5 0 0
5 1 79
5 2 88
5 3 88
5 4 88
Wie ihr seht, arbeite ich mit dem ASCII-Code und versuche so, nur die X und O in das Array zu überführen. Leider erzeugt der Reader beim Zeilenwechsel noch die Int-Werte 10 und 13, weshalb ich es nicht hinbekomme, das Array korrekt einzulesen. Vielleicht habt ihr dazu ja eine Idee, sollte es eine Alternatividee zu meinem Vorgehen sein, bin ich auch dafür immer offen und sehr dankbar.
Ich hoffe, dass ihr dafür eine Idee habt
Beste Grüße