Hallo,
ich darf nun in meinem Studium Java lernen, natürlich bekommen wir auch Aufgaben gestellt, die zu lösen sind. Nun habe ich ein Problem mit folgender Aufgabe:
Zu erstellen ist ein Labyrinth als Char-Array mit 10x10 Feldern, ein Leerzeichen bedeutet Weg, ein X bedeutet Wand.
Startpunkt (S) ist die Mitte des Labyrinths. Nun soll rekursiv ein Ausweg an den Rand des Labyrinths gefunden werden, und der mögliche Weg soll am Ende mit Sternchen ausgegeben werden, etwa so:
Nun bin ich schon soweit, dass ich meinen Weg ausgegeben bekomme, erstellt mein Random-Labyrinth-Generator jedoch ein Labyrinth ohne Ausweg, erhalte ich die Fehlermeldung : ArrayIndexOutOfBoundsException: -1 und ich verstehe nicht wieso.
Hier mein Code:
Ich weiß, dass der Index eines Array bei 0 beginnt, heißt, mein Labyrinth-Array hat eigentlich 11 Stellen und nicht 10. Aber egal wie ich es drehe, ich komm nicht auf die Lösung, weil ich einfach nicht verstehe, was logisch gesehen schief läuft.
Vielleicht kann mir jemand Hilfe-Stellung geben?
Danke schon vorab und viele Grüße,
Susi
ich darf nun in meinem Studium Java lernen, natürlich bekommen wir auch Aufgaben gestellt, die zu lösen sind. Nun habe ich ein Problem mit folgender Aufgabe:
Zu erstellen ist ein Labyrinth als Char-Array mit 10x10 Feldern, ein Leerzeichen bedeutet Weg, ein X bedeutet Wand.
Startpunkt (S) ist die Mitte des Labyrinths. Nun soll rekursiv ein Ausweg an den Rand des Labyrinths gefunden werden, und der mögliche Weg soll am Ende mit Sternchen ausgegeben werden, etwa so:
Java:
Es wurde ein Ausweg gefunden!
X X XXXXX
XXX XX X
XXXX X XX
XXXX X
X**S
** X
X* X
X* XX
X* XXXX X
*X X X X
Nun bin ich schon soweit, dass ich meinen Weg ausgegeben bekomme, erstellt mein Random-Labyrinth-Generator jedoch ein Labyrinth ohne Ausweg, erhalte ich die Fehlermeldung : ArrayIndexOutOfBoundsException: -1 und ich verstehe nicht wieso.
Hier mein Code:
Java:
public class Labyrinth {
public static void main(String[] args) {
char[][] labyrinth = new char[10][10];
for( int i = 0; i < labyrinth.length; i++ ) {
for( int j = 0; j < labyrinth[i].length; j++ ) {
if(java.lang.Math.random() > 0.4 ) {
// blockiert
labyrinth[i][j] = 'X';
}
else {
// frei
labyrinth[i][j] = ' ';
}
}
}
// Mitte/Startpunkt errechnen
int horizontaleMitte = (labyrinth.length -1 ) / 2;
int vertikaleMitte = (labyrinth[0].length -1 ) / 2;
//Startpunkt
labyrinth[horizontaleMitte][vertikaleMitte] = 'S';
labyrinthAusgeben(labyrinth);
boolean ende = wegFinden(labyrinth , horizontaleMitte, vertikaleMitte);
if(ende){
System.out.println("Es wurde ein Ausweg gefunden!");
labyrinthAusgeben(labyrinth);
}
else{
System.out.println("Es wurde kein Ausweg gefunden!");
}
}
public static boolean wegFinden(char [][] labyrinth, int i, int j){
boolean wegGefunden = true;
int nachRechts = j+1;
int nachLinks = j-1;
int nachUnten = i+1;
int nachOben = i-1;
if(i == labyrinth.length-1 || j == labyrinth[0].length-1){
return wegGefunden;
}
else {
if (labyrinth[i][nachRechts] == 'X'){
labyrinth[i][nachRechts] = 2;
if(wegFinden(labyrinth,i,nachRechts)) {
labyrinth[i][nachRechts] = '*';
return true;
}
}
if (labyrinth[nachUnten][j] == 'X'){
labyrinth[nachUnten][j]=2;
if(wegFinden(labyrinth,nachUnten,j)) {
labyrinth[nachUnten][j] = '*';
return true;
}
}
if (labyrinth[i][nachLinks] == 'X'){
labyrinth[i][nachLinks]=2;
if(wegFinden(labyrinth,i,nachLinks)) {
labyrinth[i][nachLinks] = '*';
return true;
}
}
if (labyrinth[nachOben][j] == 'X'){
labyrinth[nachOben][j]=2;
if(wegFinden(labyrinth,nachOben,j)) {
labyrinth[nachOben][j] = '*';
return true;
}
}
}
return false;
}
/*
* Ausgabe des gesamten Feldes auf dem Bildschirm
*/
public static void labyrinthAusgeben( char[][] labyrinth ) {
for( int i = 0; i < labyrinth.length; i++ ) {
for( int j = 0; j < labyrinth[i].length; j++ ) {
System.out.print( labyrinth[i][j] );
}
System.out.println();
}
}
}
Ich weiß, dass der Index eines Array bei 0 beginnt, heißt, mein Labyrinth-Array hat eigentlich 11 Stellen und nicht 10. Aber egal wie ich es drehe, ich komm nicht auf die Lösung, weil ich einfach nicht verstehe, was logisch gesehen schief läuft.
Vielleicht kann mir jemand Hilfe-Stellung geben?
Danke schon vorab und viele Grüße,
Susi
Zuletzt bearbeitet von einem Moderator: