U
unbekannt
Gast
Hallo, ich hab ein Programm geschrieben was ein Labyrinth aus einer Textdatei lesen soll und einen Ausweg finden soll. Nur leider hab ich das Problem mit der Ausnahme ArrayIndexOutOfBoundsException in Zeile 154, die er mir auf die Konsole ausgibt. Leider hab ich nicht so genau die Ahnung, was ich ändern muss... deswegen such ich dringend Hilfe!
Code:
mport java.io.*;
import java.util.*;
public class Labyrinth {
// Symbole
private static final char wand = 'X';
private static final char gaenge = ' ';
private static final char anfang = '+';
private static final char weg = '*';
// In diesem Array wird das Labyrinth abgespeichert
private char[][] laby;
// Hoehe und Breite des Labyrinthes
private int hoehe;
private int breite;
// Startpunkt im Labyrinth
private int startZeile;
private int startSpalte;
private int ausgangZeile;
private int ausgangSpalte;
// Initialisierung der Attribute
public Labyrinth() {
laby = null;
hoehe = -1;
breite = -1;
startZeile = -1;
startSpalte = -1;
ausgangZeile = -1;
ausgangSpalte = -1;
}
// nachfolgende Methoden geben die Werte der Attribute ausgangZeile u. ausgangSpalte zurueck.
public int leseAusgangZeile() {
return ausgangZeile;
}
public int leseAusgangSpalte() {
return ausgangSpalte;
}
// Labyrinth aus Datei lesen
public boolean einlesenLab(String dateiname) {
char c = ' ';
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(dateiname);
br = new BufferedReader(fr);
}
catch(FileNotFoundException e) {
System.out.println("Datei nicht gefunden!");
}
try {
String s = br.readLine();
StringTokenizer st= new StringTokenizer( s );
breite= Integer.parseInt( st.nextToken() );
s= br.readLine();
st= new StringTokenizer( s );
hoehe= Integer.parseInt( st.nextToken() );
laby= new char[hoehe][breite];
for (int zeile=0; zeile < hoehe; zeile++) {
s= br.readLine();
for (int spalte=0; spalte < breite; spalte++) {
c= s.charAt(spalte);
switch(c) {
case anfang:
startSpalte = spalte;
startZeile = zeile;
laby[zeile][spalte] = gaenge;
break;
case wand:
case gaenge:
laby[zeile][spalte]= c;
break;
default:
System.out.println("Falsche Eingabe!");
return false;
}
} // ende fuer spalte
} // ende fuer zeile
}
catch(java.io.IOException e2) {
System.out.println("IO Exception");
}
return true;
}
// Methode toString() gibt den Inhalt des Feldes als String zurück
public String toString() {
String ergebnis = " ";
for (int zeile = 0; zeile < hoehe; zeile++) {
for (int spalte = 0; spalte < breite; spalte++) {
ergebnis += laby[zeile][spalte];
}
ergebnis += "\n";
}
return ergebnis;
}
// Starten der Suche nach dem Weg aus dem Labyrinth
public boolean starteSuche() {
return berechneWeg(startZeile, startSpalte);
}
private boolean berechneWeg(int zeile, int spalte) {
if (laby[zeile][spalte] != weg) {
return false;
};
laby[zeile][spalte] = weg;
if(spalte == 0 || spalte == breite-1||
zeile == 0 || zeile == hoehe-1) {
ausgangZeile = zeile;
ausgangSpalte = spalte;
return true;
};
// Weg nach oben
if(berechneWeg(zeile-1, spalte)) {
return true;
};
// Weg nach unten
if(berechneWeg(zeile+1, spalte)) {
return true;
};
// Weg nach links
if(berechneWeg(zeile, spalte-1)) {
return true;
};
// Weg nach rechts
if(berechneWeg(zeile, spalte+1)) {
return true;
};
// kein Weg
laby[zeile][spalte] = gaenge;
return false;
}
// main-Methode
public static void main(String[] arg) {
Labyrinth labyrinth = new Labyrinth();
if(!labyrinth.einlesenLab(arg[0])) {
System.exit(1);
if(!labyrinth.starteSuche()) {
System.out.println("Es gibt kein Weg aus dem Labyrinth!");
}
else {
System.out.println("Es wurde ein Ausgang aus dem Labyrinth gefunden!");
System.out.println(labyrinth.leseAusgangZeile() + "Zeile");
System.out.println(labyrinth.leseAusgangSpalte() + "Spalte");
System.out.println(labyrinth);
}
}
}
}