Hallo zusammen,
muss ein Programm schreiben, dass Wege aus dem Labyrinth sucht. Hab´s mit Rekursion versucht, nur leider hängt sich das Ganze immer auf und ich bekomme einen StackOverflowError. Kann mir jemand bei der Fehlersuche helfen?
muss ein Programm schreiben, dass Wege aus dem Labyrinth sucht. Hab´s mit Rekursion versucht, nur leider hängt sich das Ganze immer auf und ich bekomme einen StackOverflowError. Kann mir jemand bei der Fehlersuche helfen?
Java:
private void aufbauen (){
Random ra = new Random();
System.out.println("Labyrinth ohne Wegzeichnung");
for (int i=0; i<=9; i++ ){
for (int j=0; j<=9; j++){
if (i==4 && j==4){
array2D [i][j] = " ";
}
else{
int x = ra.nextInt(2);
if (x==0) array2D [i][j] = " ";
if (x==1) array2D [i][j] = "X";
}
System.out.print(array2D [i][j]);
}
System.out.print('\n');
}
}
public boolean existWeg(int i, int j){
String inhalt = array2D[i][j];
// zuerst die Faelle pruefen die keinen rekursiven Aufruf erfoerdern
// 1. ausserhalb des Labyrinths return false
if (i<0 | i>9 | j<0 | j>9){
return false;
}
// 2. Platz nicht frei return false
else{
if (inhalt.equals("X")) return false;
// wenn dies nicht zutrifft, koennte der Weg erfolgreich sein
else{
if (inhalt.equals(" ")){
// die Stelle mit * kennzeichnen, falls die Grenze schon erreicht ist, oder existsWeg(x+1, y) oder existsWeg(x-1,y ) usw... return true
if (i==0 | i == 9 | j==0 | j == 9){
array2D[i][j] = "*";
System.out.println ("Weg gefunden");
return true;
}
else{
boolean oben = existWeg(i-1,j);
boolean unten = existWeg(i+1,j);
boolean links = existWeg(i,j-1);
boolean rechts = existWeg(i,j+1);
if (links | rechts | oben| unten) {
array2D[i][j] = "*";
return true;
}
else{
return false; // sonst return false
}
}
}
else{
return false;
}
}
}
}