Problem mit verschachtelten for Schleifen



  • Hallo,

    ich versuche momentan ein Viergewinnt Spiel in Java zuschreiben. Nur habe ich einige Probleme mit der Spielfeldausgabe.

    Zur Erklärung: Das Spielfeld ist 7*6 (x*y) Felder groß und die Zeichen der Spieler (X oder O) sollen in einem 2-dimensionalen Array ([x][y]) gespeichert werden. Die Spielfeldausgabe soll dann halt die Zeichen, sofern vorhanden, ausgeben.

    Das Problem habe ich versucht mit 2 ineinander verschachtelten for Schleifen zulösen.

    char a_spielfeld[][] = new char[5][6];
    int x,y;
    
    for( y=6; y>=0; y-- ) {
    	System.out.print(" " + y+1 + " :");
    
    	for( x=0; x<7; x++ ) {
    		System.out.print(a_spielfeld[x][y] + " |");
    	}
    }
    

    Nur gibt diese Schleife, warum auch immer, überhaupt nichts aus. Zu Beginn kam noch ein Fehler, doch jetzt passiert gar nichts mehr 😞

    Es wäre schön wenn mir jemand helfen könnte. Ich bin noch neu auf dem Gebiet Java und dachte mir, nachdem ich in C ein VierGewinnt Sopiel geschrieben hatte, dass ich zu Lernzwecken auch eins in Java versuchen sollte.



  • Und jetzt sei froh, dass du gerade in Java programmierst. In C wärst du jetzt nämlich ohne es zu merken über die Array-Grenzen hinausgerast.



  • Konrad schrieb:

    char a_spielfeld[][] = new char[5][6];  // Ein 2-dimensionales Array mit 5 Einträgen in der ersten, 6 Einträgen in der zweiten Dimension
    // Zuzugreifen über Indizes 0..4 und 0..5
    
    for( y=6; y>=0; y-- ) {  // Hier durchläufst Du von 6 bis =0, d.h. 7 Einträge!!!!
    	System.out.print(" " + y+1 + " :");  // Ist ja bei dieser simplen Variable auch kein Problem
    	
    	for( x=0; x<7; x++ ) {  // Hier von =0 bis 6, also ebenso 7 Einträge!!!!
    		System.out.print(a_spielfeld[x][y] + " |");  // Der erste Zugriff führt schon ein a_spielfeld[0][6] aus und sollte eine Exception schmeissen, da maximal ein a_spielfeld[4][5] erlaubt wäre!!
    	}
    }
    


  • Danke euch beiden. Meinen (Denk-)Fehler habe ich gefunden. Nur geht es leider immer noch nicht. Ich habe mal die den forSchleifen Code mit dem Code meines "C Spiels" verglichen, mit dem Ergebnis das die Schleifen in beiden Programmen gleich sind, mit dem Unterschied das in C das Spielfeld angezeigt wird, in Java hingegen nicht. 😞

    char a_spielfeld[][] = new char[7][6];
    
    for( int y=5; y>=0; y-- ) {
    	System.out.print(" ");
    	System.out.print( y );
    	System.out.print(" :");
    
    	for( int x=0; x<7; x++ ) {
    		System.out.print(a_spielfeld[x][y]);
    		System.out.print(" |");
    	}
    }
    

    Ich bitte um Verständnis, ich bin halt noch Anfänger in Sachen Java.. 🙂



  • Irgendwie hast du nirgendwo einen Zeilenwechsel drin??

    - print schreibt, ohne die Zeile umzubrechen.
    - println schreibt mit anschließendem Zeilenumbruch.
    - "\n" funktioniert in Java genauso wie in C.

    - Nutze die Vorteile, die Java bietet!

    for( int x=0;  x < a_spielfeld.length;  x++ )
    { 
    	System.out.print(a_spielfeld[x][y]); 
    	System.out.print(" |"); 
    }
    


  • Das Problem ist ja ein ganz anderes. Es wird nur der folgende Teil einmal ausgegeben.

    System.out.print(" ");
    System.out.print( y );
    System.out.print(" :");
    

    Und zu den Zeilenumbrüchen.. Ich hatte im Programmnoch folgendes, was allerdings nichts mit meinem Problem zutun hat, was auch der Grund dafür ist, dass ich es nicht mit gepostet habe.

    System.out.print("\n---:---+---+---+---+---+---+---+\n");
    

    Dieser Befehl sollte nachdem die innere forSchleife durchgelaufen war ausgeführt werden..



  • Also bei meiner Ausgabe hab ich mehrere Zahlen da stehen.



  • Ich hab es jetzt zum testen mal in KWrite, und nicht in Eclipse, eingegeben und es geht. Danke 🙂


Anmelden zum Antworten