2D Array - char durch die Matrix "wandern" lassen

ethanhunt

Mitglied
Hallo,

als Einsteiger versuche ich in einem 2D-Array ein Zeichen wandern zu lassen. Durch die Eingabe für links, rechts, rauf, runter wandert das Zeichen.
Es funktioniert in alle Richtungen, nur nicht nach "unten". Hier wirft mir Eclipse die OutOfBoundsException.

Der Code:
Java:
public static void main(String[] args)
    {
        
        char arr[][] =  {{'x','x','x'},
                              {'x','x','x'},
                              {'x','x','x'}};
        
        char cross = 'o';
        
        arr [1][1] = cross;
        
        for (char[] elemente : arr)
            System.out.println(elemente);
        
        int auswahl;
        System.out.println("auswahl 1 = rauf; auswahl 2= runter; 3= links; 4= rechts");
        Scanner sc = new Scanner (System.in);
        auswahl = sc.nextInt();
        
        for (int i = 0; i < arr.length; i = i + 1 )
        {
            for (int j = 0; j < arr[i].length; j++)
            {
                int temp;
        
                if (arr[i][j] == 'o')
                {
                    arr[i][j] = 'x';
                    
                    if (auswahl == 1)
                    {
                        temp = i - 1;
                        arr[temp][j] = 'o';
                        break;
                    }
                    
                    if (auswahl == 2) //Char 'o' soll nach unten wandern.
                    {
                        temp = i + 1;
                        System.out.println(temp); // Temp wird auf 2 gesetzt und ausgegeben.
                        arr[temp][j] = 'o';  // Hier ensteht der Fehler. Manuell cross=  'o' auf [2][1] intialisieren funktioniert. Das müsste der Wert sein, der in dieser If Bedingung ermittelt wird für das Array.
                        break;
                    }
                    if (auswahl == 3)
                    {
                        temp = i - 1;
                        arr[i][temp] = 'o';
                        break;
                    }
                    
                    if (auswahl == 4)
                    {
                        temp = i + 1;
                        System.out.println(temp);
                        arr[i][temp] = 'o';
                        break;
                    }
                    
                }
                
            }//inner for
                
        }//end for
 
sorry, hatte nur Kommentare daneben geschrieben. Es ist der Teil:
Java:
 if (auswahl == 2) //Char 'o' soll nach unten wandern.
                    {
                        temp = i + 1;
                        System.out.println(temp); // Temp wird auf 2 gesetzt und ausgegeben.
                        arr[temp][j] = 'o';  // Hier ensteht der Fehler. Manuell cross=  'o' auf [2][1] intialisieren funktioniert. Das müsste der Wert sein, der in dieser If Bedingung ermittelt wird für das Array.
                        break;
 
Hi Kirby Sike: Wenn i auf 2 ist, bin ich außerhalb des Arrays.
Initial ist ist das Zeichen 'o' auf [1][1] im Array. Sollte also auf 2 gehen können.

Start initial:
xxx
xox
xxx

Wenn (auswahl = 2, also "runter") müsste doch die Ausgabe folgendes zeigen?
xxx
xxx
xox

Die If- Bedingung zB: mit auswahl 1= rauf zeigt auch
xox
xxx
xxx
Da funktionierts.

Dass es kein [3] geben kann und zum Fehler führt - ok. Aber soweit geht die Variable temp noch nicht, da sie nur den Wert 2 erhält in dem Code Beispiel.
 
Vermutlich wird er zwei Schritte nach unten gehen wollen. Hast du nicht auch die Ausgabe 3?

Dein Break verläßt die innere Schleife. Aber die äußere läuft weiter. Somit findet er das o auch in der dritten Zeile und will es in die 4te packen.
 
@Kirby_Sike: hast recht 🙂 ich werde noch eine Begrenzung einführen
@JustNovody: Danke, hast absolut recht. Das Zeichen o rutscht zusammen mit der Schleifenabfrage runter und findet sich immer wieder. Das erhöht temp.

Ich hab eine Marke eingesetzt und es funktioniert

Bsp:
Java:
    Arraydurchlauf: // Marke
        for (int i = 0; i < arr.length; i = i + 1 )
        {
            for (int j = 0; j < arr[i].length; j++)
            {
                int temp;
        
                if (arr[i][j] == 'o')
                {
                    arr[i][j] = 'x';
                    
                    if (auswahl == 1)
                    {
                        temp = i - 1;
                        arr[temp][j] = 'o';
                        break Arraydurchlauf; //Durchbricht beide Schleifen
                    }
                    
                    if (auswahl == 2)
                    {
                        temp = i + 1;
                        System.out.println(temp);
                        arr[temp][j] = 'o'; 
                        break Arraydurchlauf;
                    }

Danke!
 

Neue Themen


Zurück
Oben