Unbekanntes Problem mit 2d Array

L_uWi

Mitglied
Wieso bekomme ich immer dieses Probelm?
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10

[CODE lang="java" title="Labyrinth"]package labyrinth;

public class Main {
static int[][] labyrinth = new int[][] {
{1,1,1,1,1,1,1,1,1,1}, //0 = unknown
{1,0,1,3,0,0,0,0,0,1}, //1 = wall
{1,0,1,1,1,0,1,1,0,1}, //3 = start
{1,0,0,0,0,0,1,0,0,1}, //5 = up
{1,1,1,1,1,1,1,1,0,1}, //6 = right
{1,0,0,0,0,0,0,1,0,1}, //7 = left
{1,1,1,1,1,1,0,1,0,1}, //8 = down
{1,0,0,0,1,1,0,0,0,1},
{1,0,1,0,0,0,0,1,0,1},
{1,0,1,1,1,1,1,1,1,1}};

public static void main(String[] args) {

for(int i=0; i<=9; i++){
for(int j=0; j<=9; j++){
System.out.print(labyrinth[j] + " ");
}
System.out.println("");
}

System.out.println();
if(search(3,1) == false) {}
System.out.println();

for(int i=0; i<=9; i++){
for(int j=0; j<=9; j++){
System.out.print(labyrinth[j] + " ");
}
System.out.println("");
}
}

public static boolean search(int x, int y){

if(labyrinth[x][y-1] == 0){
labyrinth[x][y-1] = 8;
if(y-1 == 0 || search(x, y-1))
{
return true;
}
}

if(labyrinth[x+1][y] == 0){
labyrinth[x+1][y] = 7;
if(x+1 == 0 || search(x+1, y))
{
return true;
}

}if(labyrinth[x][y+1] == 0){
labyrinth[x][y+1] = 5;
if(y+1 == 0 || search(x, y+1))
{
return true;
}

}if(labyrinth[x-1][y] == 0){
labyrinth[x-1][y] = 6;
if(x-1 == 0 || search(x-1, y))
{
return true;
}
}

return false;

}
}[/CODE]
 
wo kommt die exception ? ... deswegen in methoden unterteilen => einfacher fehler finden
 
Java:
    static void printLabyrinth(){
         for(int i=0; i<=9; i++){
            for(int j=0; j<=9; j++){
                System.out.print(labyrinth[i][j] + " ");
            }
            System.out.println("");
        }
     }
wenn du es in methoden auslagerst wird dir der stacktrace sagen "in printLabyrinth is der Fehler passiert" ... somti weist du du musst in der mehtode nachschauen ... => somit kannst du einfacher den fehler finden 🙂
 
Es wird immer noch das gleich angezeigt und da drunter das:
[CODE lang="java" title="Fehler"]Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
at labyrinth.Main.search(Main.java:34)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:50)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:28)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:36)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.search(Main.java:50)
at labyrinth.Main.search(Main.java:50)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.search(Main.java:43)
at labyrinth.Main.main(Main.java:19)
[/CODE]
Das ist immer in der search() Methode, genauer der Verzweigungen. Aber ich weis nicht was daran falsch ist?
 
In search werden die Grenzen nicht korrekt geprüft, daher bekommst Du die Exception. Zum Beispiel:

if(x+1 == 0 || search(x+1, y))

Wieso sollte x+1 == 0 sein?
 

Zurück
Oben