Game of life Ein und Ausgabe Configurations Datei

Blancoreb

Mitglied
Hallo zusammen,

ich möchte Conway's Game of life so prammieren, so dass die Feldgröße so wie die Anfangs lebendigen Zellen von einer txt Datei ausgelesen werden und in ein 2D Array gespeichert wird. Leider habe ich damit einige Probleme.
Die txt Datei sieht so aus:
x=65
y=33
29,14
29,15
29,16
30,14
usw...
Also sollen mir die ersten beiden Werte die Feldgröße des 2D Arrays vermitteln und der Rest sollen Koordinaten sein wo sich am Anfang meine lebenden Zellen befinden. Anschließend werden die Regeln angewendet und das Ergebnis weider in eine txt Datei ausgegeben. Schwierigkeiten bereitet mir zunächst das Einlesen, da ich nicht genau weiß wie ich von einem String in ein 2D Boolean Array komme. Ich weiß nur das ich Funktionen wie split() und trim() benutzen muss aber weiß nicht genau wie und wo. Vielleicht kann mir jemand helfen habe bereits sämtliche Foren durchsucht und Videos angeschaut leider nichts gefunden was mir weiterhilft. Bisher habe ich folgendes:

Java:
public class Test_Array {

   static int [][] testwelt;

   static {
     java.lang.String sTemp;
     int i,j;
     testwelt = new int [10][10];
     try {
       // Datei öffnen
       java.io.BufferedReader oReader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(new java.io.File("A:\\test.txt"))));
       // Zeile für Zeile einlesen
       i=0;
       while ((sTemp = oReader.readLine()) != null) {
         // Zeile in Einzelteile zerlegen (wir trennen durch ,
         java.util.StringTokenizer stWerte = new java.util.StringTokenizer(sTemp,",");
         j=0;
         // Nun eintragen in den Array. Es wird nicht überprüft, ob die Grenzen überschritten werden!
         while(stWerte.hasMoreTokens()) {
           testwelt[j] = java.lang.Integer.parseInt(stWerte.nextToken());
           j++;
         }
         i++;
       }
     } catch (java.io.FileNotFoundException e) {
       e.printStackTrace();  //Fehler ausdrucken
     } catch (java.io.IOException e) {
       e.printStackTrace();  //Fehler ausdrucken
     }
   }

   public static void main(String args[]) {
     for (int i=0;i<testwelt.length;i++){
       for (int j=0;j<testwelt.length;j++){
         // "X" bedeutet lebendige Zelle
         if (testwelt [j] != 0){
           System.out.print("X" + " ");
         } else {
           System.out.print("O" + " ");
         }
       }
       System.out.println();
     }
   }
}


Ausgabe:
X X O O O O O O O O
X X O O O O O O O O
X X O O O O O O O O
O O O O O O O O O O
O O O O O O O O O O
O O O O O O O O O O
O O O O O O O O O O
O O O O O O O O O O
O O O O O O O O O O


Die Ausgabe macht er irgendwie da ich nicht weiß wie ich ihm klar mache das er die txt Datei Werte als 2D Array Koordinaten betrachten soll.
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,
Die Ausgabe macht er irgendwie da ich nicht weiß wie ich ihm klar mache das er die txt Datei Werte als 2D Array Koordinaten betrachten soll
Bitte was?? Nochmal verständlich bitte :rolleyes:

Was mir so auf die Schnelle auffiel:
Du hast Dein Array so deklariert: "testwelt = new int [10][10]", greifst dann auber imm ernur mit EINEM Index drauf zu! Dann kann nicht klappen ... :confused:

Gruß Klaus
 

InfectedBytes

Top Contributor
Am besten liest du erst einmal die ersten beiden Zeilen ein und erstellst dir dann ein neues array der passenden größe.
Danach liest du zeilenweise den Rest aus und setzt immer den entsprechenden Eintrag im Array auf true.
Falls du z.b. die Zeile 29,14 einliest, dann splittest du diese am Komma und kannst dir dann die beiden Zahlen per Integer.parseInt holen. Danach nur noch welt[y][x]=true setzen und fertig
 

Blancoreb

Mitglied
Danke für die Antworten,

Klaus du hast natürlich recht, da ist was beim koopieren schief gelaufen.
So sollte es aussehen:
Java:
public class Test_Array {

   static int [][] testwelt;

   static {
     java.lang.String sTemp;
     int i,j;
     testwelt = new int [10][10];
     try {
       // Datei öffnen
       java.io.BufferedReader oReader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(new java.io.File("A:\\test.txt"))));
       // Zeile für Zeile einlesen
       i=0;
       while ((sTemp = oReader.readLine()) != null) {
         // Zeile in Einzelteile zerlegen (wir trennen durch ,
         java.util.StringTokenizer stWerte = new java.util.StringTokenizer(sTemp,",");
         j=0;
         // Nun eintragen in den Array. Es wird nicht überprüft, ob die Grenzen überschritten werden!
         while(stWerte.hasMoreTokens()) {
           testwelt[i][j] = java.lang.Integer.parseInt(stWerte.nextToken());
           j++;
         }
         i++;
       }
     } catch (java.io.FileNotFoundException e) {
       e.printStackTrace();  //Fehler ausdrucken
     } catch (java.io.IOException e) {
       e.printStackTrace();  //Fehler ausdrucken
     }
   }

   public static void main(String args[]) {
     for (int i=0;i<testwelt.length;i++){
       for (int j=0;j<testwelt.length;j++){
         // "X" bedeutet lebendige Zelle
         if (testwelt [i][j] != 0){
           System.out.print("X" + " ");
         } else {
           System.out.print("O" + " ");
         }
       }
       System.out.println();
     }
   }
}

Danke InfectedBytes so habe ich mir das auch vorgestellt nur leider fehlt mir einfach noch die Erfahrung um das umzusetzen, da mein bufferedReader auch etwas komplizierter implementiert ist weiß ich nicht an welcher Stelle genau ich ansetzen soll gibt es da nicht noch eine übersichtlichere Möglichkeit die Datei auszulesen?
 
Zuletzt bearbeitet von einem Moderator:

InfectedBytes

Top Contributor
Im Grunde machst du es dir auch ein bisschen komplizierter als nötig.
Als aller erstes solltest du die beiden ersten Zeilen einlesen, damit du das Array passend erstellen kannst.
Erst danach machst du eine Schleife, welche Zeilenweise bis ans Ende liest.
Und in jedem Durchlauf einfach:
Java:
String[] coords = sTemp.split(",");
int x = Integer.parseInt(coord[0]);
int y = Integer.parseInt(coord[1]);
welt[y][x] = true;

p.s.
Ich würde dir empfehlen deine Variablen etwas umzubenennen. z.B. line anstatt sTemp
 

VfL_Freak

Top Contributor
Moin,

Java:
String[] coords = sTemp.split(",");
int x = Integer.parseInt(coord[0]);
int y = Integer.parseInt(coord[1]);
welt[y][x] = true;
p.s.
Ich würde dir empfehlen deine Variablen etwas umzubenennen. z.B. line anstatt sTemp
Genau :)
Und auf die Gefahr hin, dass dieser Code nur stumpf kopiert wird, einheitlich "coords" oder "coord" :cool:

Gruß Klaus
 

Blancoreb

Mitglied
Ich habe jetzt nochmal den Bufferedreader etwas verändert und versuche die Erste Zeile auszulesen und in ein Array zu speichern. Weis jemand warum das nicht funktioniert? Versuche ein String [] in ein Int [] zu parsen:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class auslesen {
   
       
   
     BufferedReader bufferedReader = null;
    
     //Der Pfad zur Textdatei
     String filePath ="C:\\test.txt";
     File file = new File(filePath);{
     try {
         //Der BufferedReader erwartet einen FileReader.
         //Diesen kann man im Konstruktoraufruf erzeugen.
         bufferedReader = new BufferedReader(new FileReader(file));
       String line;
       //null wird bei EOF oder Fehler zurueckgegeben
       while (null != (line = bufferedReader.readLine())) {
         //Zeile auf der Konsole ausgeben
        
           String [] value1 = line.split("x=");
           int a [] = Integer.parseInt(value1 []);
          
    System.out.println(value1);
          
         
        
         /*String[] coord = Line.split("x=");
         int x = Integer.parseInt(coord[0]);
         int y = Integer.parseInt(coord[1]);
         welt [y][x] = true;*/
        
         //Hier kann Ihr Code stehen ...
       }
     } catch (IOException e) {
         e.printStackTrace();
     } finally {
       if (null != bufferedReader) {
         try {
           bufferedReader.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
       }
     }
}

public static void main(String[] args) {
   
}
}
 

Joose

Top Contributor
Weil du nicht einfach ein Array in ein anderes casten kannst. Du musst ein int[] mit passender Länge erstellen und jeden Wert umwandeln.
Abgesehen davon ist value[] sowie so irgendwas komisches ;) entweder übgibst du das ganze Array dann lass die Klammern weg oder einen bestimmten Index dann muss zwischen den Klammern der Index stehen.
 

Blancoreb

Mitglied
Okay danke, ich glaube ich habe es soweit verstanden. Nur bin ich mir nicht sicher wo ich die ersten 2 Zeilen auslesen soll. Also wo schreibe ich diesen Code hin:
String[] xKord= line.split("x=");

int x = Integer.parseInt(xKord[1]);

String[] yKord= line.split("y=");

int x =yInteger.parseInt(xKord[1]);
Und wie sage ich ihm das x in der Ersten Zeile ist und dann in der Zweiten Zeile y kommt. Brauch ich nicht auch dafür eine Schleife?
 

InfectedBytes

Top Contributor
nein, einfach beides hintereinander ausführen
Java:
String[] xKord= in.nextLine().split("x=");
...
String[] yKord= in.nextLine().split("y=");
...
Und anschließend erst die Schleife
 

Blancoreb

Mitglied
Ich danke euch! Habe jetzt das ganze etwas anders gelöst und bin soweit, dass ich die Feldgröße auslesen kann. Mir fehlen jetzt nur noch die Koordinaten an den die lebenden Zellen festgelegt werden.
Hier noch mal meine Datei:
x=4
y=6
1,8
4,5

Theoretisch müsste ich die ersten beiden Zeilen dann überspringen da ich Sie schon behandelt habe und dann in einer Schleife den Rest auslesen und Parsen. Eigentlich klingt das einfach und es ist nicht viel Code aber ich bekomme es einfach nicht hin.... Vielleicht kann mir ja nochmal jemand dabei helfen.
Hier meine Methode:

Java:
    public static boolean[][] xy_auslesen() throws FileNotFoundException{
        
        // create token1
        String token1 = "";
        // create Scanner inFile1
        Scanner inFile1 = new Scanner(new File("A:\\test.txt"));
        // Original answer used LinkedList, but probably preferable to use ArrayList in most cases
        List<String> temps = new ArrayList<String>();

        // while loop
        while (inFile1.hasNext()) {
          // find next line
          token1 = inFile1.next();
          temps.add(token1);
   
        }
    
        inFile1.close();

        String[] tempsArray = temps.toArray(new String[0]);
       
        String[] leseX = tempsArray[0].split("x=");
        int x = Integer.parseInt(leseX[1]);
        //System.out.println(x);
       
        String[] leseY = tempsArray[1].split("y=");
        int y = Integer.parseInt(leseY[1]);
        //System.out.println(y);
   
     
        boolean [][] lege_welt_groese_fest = new boolean [x][y];
      
        return lege_welt_groese_fest;
       
      
        }
 

Blancoreb

Mitglied
Sorry habe es nochmal geändert, eigentlich sollte es so Funktionieren aber irgendwas klappt nicht mit den Koordinaten einlesen, leider werden mir nicht die toten Zellen mit "O" gekennzeichnet. Weiß jemand was da nicht stimmt?
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class auslesen {
   

       
   
        public static boolean[][] auslesen_koordinaten() throws NumberFormatException, IOException{
           
   
     BufferedReader bufferedReader = null;
    
     //Der Pfad zur Textdatei
     String filePath ="C:\\test.txt";
     File file = new File(filePath);{
   
         //Der BufferedReader erwartet einen FileReader.
         //Diesen kann man im Konstruktoraufruf erzeugen.
         bufferedReader = new BufferedReader(new FileReader(file));
         int skiplines = 2;
       String line;
  
    String [] xKord = bufferedReader.readLine().split("x=");
    int laenge = Integer.parseInt(xKord[1]);
    String [] yKord = bufferedReader.readLine().split("y=");
    int breite = Integer.parseInt(yKord[1]);
    //System.out.println(breite);
    //System.out.println(laenge);
   
    boolean [][] welt = new boolean [laenge][breite];
   
    //ab 3. Zeile Durchlaufen
       for(int i=0;i<skiplines;i++)
           bufferedReader.readLine();
       while ((line = bufferedReader.readLine()) != null) {
         //Zeile auf der Konsole ausgeben
         
     
        
         for (int i=0;i<welt.length;i++){
             for (int j=0;j<welt[0].length;j++){
                
                
         String[] koord = line.split(",");
  
         int x = Integer.parseInt(koord[0]);
       
         int y = Integer.parseInt(koord[1]);
         welt [x][y] = true;
             }
     
         return welt;
        
       }
        
       }
     bufferedReader.close(); 
     {
    return null;
   
        }}
    }
            public static void main(String[] args) throws NumberFormatException, IOException {
                boolean [][] welt = auslesen.auslesen_koordinaten();
               
                for(int i=0;i<welt.length;i++){
                    for(int j=0;j<welt[0].length;j++){
                        if (welt[i][j] = true){
                            System.out.print("X" + " ");
                        }else
                            System.out.print("O"+ " ");
                    }
                    System.out.println();
                    }
            }   
}
txt.Datei:
x=4
y=6
1,1
2,5
3,3
Ausgabe:
X X X X X X
X X X X X X
X X X X X X
X X X X X X
 

InfectedBytes

Top Contributor
Java:
if(welt[i][j]=true){
Hier setzt du den Eintrag auf true.
Um zu vergleichen musst du == benutzen. Wobei das eben bei booleans vollkommen unnötig ist.
Eine if-Abfrage prüft immer ob der Ausdruck in den Klammer true ist oder nicht. Daher kannst du direkt
Java:
if(Welt[i][j]){
schreiben.

Ansonsten liest du die Werte unglaublich kompliziert und vor allem falsch ein.
Die ersten beiden Zeilen hast du schon eingelesen, die nächste Zeile ist also bereits die erste Koordinate, aber dann liest du mit der for Schleife zwei weitere Zeilen ein, wodurch du eben die 3. und 4. Zeilen einfach verwirfst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Game of Life Randproblematik Allgemeine Java-Themen 9
S Conway's Game of Life Logarithmiusfehler Allgemeine Java-Themen 16
Q Game of Life "unendlichkeits" Problem Allgemeine Java-Themen 4
B Threads Game of Life - Threads Allgemeine Java-Themen 49
T Game of Life Aktualität? Allgemeine Java-Themen 4
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
B Game Of Live Allgemeine Java-Themen 4
T Java Game Development Buch Allgemeine Java-Themen 10
J Erste Schritte Mehrere Mauszeiger für Ping Pong Game Allgemeine Java-Themen 7
C game-server GUI erstellen Allgemeine Java-Themen 13
T Tile Game Performance Allgemeine Java-Themen 32
B Starthilfe 2D Game Allgemeine Java-Themen 5
kodela Gemittelte Ausgabe von Buchstaben Allgemeine Java-Themen 11
L Event Handling Ausgabe von Radioboxen und befüllen von Comboboxen Allgemeine Java-Themen 1
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
M Input/Output CMD Ausgabe als ButtonEvent Allgemeine Java-Themen 5
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
S 2-spaltige Ausgabe als Tabelle ausgeben Allgemeine Java-Themen 12
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
B JFrame Text Ausgabe Allgemeine Java-Themen 7
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
J Ausgabe nach Excel Allgemeine Java-Themen 1
balwan Unverständlichkeit einer Ausgabe Allgemeine Java-Themen 4
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
B Barcode4j Ausgabe Formatieren Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
K Methoden Ausgabe erfolgt nicht Allgemeine Java-Themen 6
T Ausgabe falsch! Allgemeine Java-Themen 5
W Input/Output Ausgabe eines Statements Allgemeine Java-Themen 5
P Falsche Ausgabe Allgemeine Java-Themen 5
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
D Ausgabe von C# Konsolenanwendung lesen Allgemeine Java-Themen 5
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
P Pdf ausgabe Allgemeine Java-Themen 3
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
C Ausgabe unklar Allgemeine Java-Themen 2
J Applet Ausgabe beim Speichern ausblenden Allgemeine Java-Themen 4
Rudolf Java Ausgabe einer Texttabelle im Prompt Allgemeine Java-Themen 4
P Ausgabe der berechneten Fakultaet Allgemeine Java-Themen 12
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
E formartierte Ausgabe zur Laufzeit Allgemeine Java-Themen 2
D Bildschirm Flackert bei Ausgabe Allgemeine Java-Themen 4
K Windows Fehlerkanal -> Ausgabe in Datei Allgemeine Java-Themen 6
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
R log4j - Ausgabe der Logs Allgemeine Java-Themen 3
L in zufälligen Sekunden Ausgabe machen Allgemeine Java-Themen 2
W Ausgabe beschleunigen? Allgemeine Java-Themen 3
O Backslashes werden in der Ausgabe nicht übernommen Allgemeine Java-Themen 5
X Ausgabe auf JEditorPane Allgemeine Java-Themen 5
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
A Ausgabe in OpenOffice Calc oder pdf Allgemeine Java-Themen 3
T Ausgabe in txt.Datei speichern Allgemeine Java-Themen 23
S Boolean Ausgabe JasperReports Allgemeine Java-Themen 2
M Consolen Ausgabe Allgemeine Java-Themen 3
G Ausgabe mit tag Allgemeine Java-Themen 3
W Ausgabe von Fließkommazahlen formatieren Allgemeine Java-Themen 2
D Ausgabe HTML-Seite Allgemeine Java-Themen 5
H Externe Prozesse und Inputstreams - ausgabe in JTextArea Allgemeine Java-Themen 3
G Ausgabe in eine txt Datei schreiben? Allgemeine Java-Themen 7
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
J Ausgabe der Quelltext Zeilennummer? Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
B Ausgabe auf stdout "löschen" und dafür neue Ausgab Allgemeine Java-Themen 10
X e.printStackTrace Ausgabe in Datei umleiten? Allgemeine Java-Themen 14
B Ausgabe mit print wird verzögert Allgemeine Java-Themen 9
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
M Ausgabe in Console formatieren`? Allgemeine Java-Themen 12
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
H falsche ausgabe Allgemeine Java-Themen 15
S Datei Ausgabe Allgemeine Java-Themen 4
T Fehlersuche bzw. woher kommt diese ausgabe? Allgemeine Java-Themen 2
D Formatierte Ausgabe vom ProcessBuilder Allgemeine Java-Themen 4
S Endlos-Schleife bei Ausgabe von ArrayList Allgemeine Java-Themen 6
L Ausgabe auf GUI verzögert Allgemeine Java-Themen 2
D Die Ausgabe von Tidy in eine Datei umleiten Allgemeine Java-Themen 3
R Vorzeichen bei der Ausgabe Allgemeine Java-Themen 7
G Problem mit Ausgabe-Kanälen Allgemeine Java-Themen 2
T Ausgabe bei Struktogrammen Allgemeine Java-Themen 2
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
B Formatierte Ausgabe Allgemeine Java-Themen 3
G Einlesen der Ausgabe eines Shellskripts mit Java Allgemeine Java-Themen 2
B Fehler bei Ausgabe in Datei Allgemeine Java-Themen 11
G Ausgabe Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben