Hallöchen 
Ich habe wieder mal ein neues Problem.
Aufgabe ist es dieses Mal, ein Labyrinth aus einer Datei einzulesen und dass ich mich quasi darin bewegen kann.
Ich habe mir mal den Post von @Kirby.exe angeguckt und mal den Code als Vorlage benutzt.
Leider komme ich aber nicht mehr weiter, da ich folgenden Fehler immer wieder bekomme:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
Könnt ihr helfen? Programmieren fällt mir alles andere als leicht und ich komme da leider nie so wirklich mit...
Vielen Dank schon einmal an der Stelle.
So sieht es aktuell aus:
[CODE lang="java" title="Labyrinth.java"]import java.io.*;
import java.util.Arrays;
public class Labyrinth {
private int spielerpositionx;
private int spielerpositiony;
private int arrayWidth;
private int arrayLength;
private boolean [][] laybrinth; //= new boolean[arrayLength][arrayWidth];
Labyrinth(String datei) throws IOException{
int counter = 0, counter2 = 0, checking = 0;
BufferedReader in = new BufferedReader(new FileReader(datei));
//try {System.out.println("Test");
String strCurrentLine;
String[] parts = in.readLine().split(" ");
laybrinth = new boolean[Integer.parseInt(parts[0])][Integer.parseInt(parts[1])];
while ((strCurrentLine = in.readLine()) != null) {
for(int i = 0; i < strCurrentLine.length(); i++) {
if(strCurrentLine.charAt(i) == 'O') {
laybrinth[counter][counter2] = true; //<-----
counter2++;
}
if(strCurrentLine.charAt(i) == '#') {
laybrinth[counter][counter2] = false; //<-----
counter2++;
}
}
counter++;
counter2 = 0;
}
System.out.println(strCurrentLine);
arrayPrinter(laybrinth);
for(int i = 0; i < laybrinth[0].length; i++) {
if(laybrinth[0] == true) {
this.spielerpositionx = i;
this.spielerpositiony = 0;
break;
}
}
System.out.println();
System.out.println("Die Spielerposition ist: (" + spielerpositionx + "|" + spielerpositiony + ")");
System.out.println("Das ist die Länge des Arrays: " + laybrinth.length);
}
public boolean bewegeDich(char symbol){
switch(symbol) {
case 'o':
if(spielerpositiony == 0) {return false;}
if(laybrinth[spielerpositiony-1][spielerpositionx] == false){return false;}
else {return true;}
//break;
case 'u':
if((laybrinth.length - spielerpositiony) < 0) {return false; }
if(laybrinth[spielerpositiony+1][spielerpositionx] == false){return false;}
else { return true;}
//break;
case 'l':
if((laybrinth[0].length - spielerpositionx) < 0) {return false;}
if(laybrinth[spielerpositiony][spielerpositionx-1] == false){return false;}
else {return true;}
//break;
case 'r':
if((laybrinth[0].length - spielerpositionx) < 0) {return false;}
if(laybrinth[spielerpositiony][spielerpositionx+1] == false){return false;}
else {return true;}
//break;
}
return false;
}
public void arrayPrinter(boolean [][] c) {
for(boolean[] l: c) {
for(boolean m: l) {
System.out.print(m + " | ");
}
System.out.println();
}
}
@Override
public String toString() {
String result = "";
for(int i = 0; i < laybrinth.length; i++) {
for(int j = 0; j < laybrinth.length; j++) {
if(laybrinth[j] == true && i != spielerpositiony && j != spielerpositionx) {
result += "O";
}else if(laybrinth[j] == true && i == spielerpositiony && j == spielerpositionx){
result += "x";
}else if(laybrinth[j] == false) {
result += "#";
}
}
result += "\n";
}
return result;
}
}[/CODE]
[CODE lang="java" title="LabyrinthTest.java [READONLY]"]import java.io.*;
public class LabyrinthTest {
public static void main(String[] args) throws IOException {
Labyrinth[] lab = new Labyrinth[args.length];
for(int i=0; i<args.length; i++) {
lab = new Labyrinth(args);
}
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
char eingabe;
while((eingabe = in.readLine().charAt(0))!='e') {
switch(eingabe) {
case 'u':
case 'o':
case 'l':
case 'r':
for(int i=0; i<lab.length; i++)
System.out.println(lab.bewegeDich(eingabe));
break;
case 'a':
for(int i=0; i<lab.length; i++)
System.out.println(lab);
break;
}
}
}
}[/CODE]
Ich habe wieder mal ein neues Problem.
Aufgabe ist es dieses Mal, ein Labyrinth aus einer Datei einzulesen und dass ich mich quasi darin bewegen kann.
Ich habe mir mal den Post von @Kirby.exe angeguckt und mal den Code als Vorlage benutzt.
Leider komme ich aber nicht mehr weiter, da ich folgenden Fehler immer wieder bekomme:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
Könnt ihr helfen? Programmieren fällt mir alles andere als leicht und ich komme da leider nie so wirklich mit...
Vielen Dank schon einmal an der Stelle.
So sieht es aktuell aus:
[CODE lang="java" title="Labyrinth.java"]import java.io.*;
import java.util.Arrays;
public class Labyrinth {
private int spielerpositionx;
private int spielerpositiony;
private int arrayWidth;
private int arrayLength;
private boolean [][] laybrinth; //= new boolean[arrayLength][arrayWidth];
Labyrinth(String datei) throws IOException{
int counter = 0, counter2 = 0, checking = 0;
BufferedReader in = new BufferedReader(new FileReader(datei));
//try {System.out.println("Test");
String strCurrentLine;
String[] parts = in.readLine().split(" ");
laybrinth = new boolean[Integer.parseInt(parts[0])][Integer.parseInt(parts[1])];
while ((strCurrentLine = in.readLine()) != null) {
for(int i = 0; i < strCurrentLine.length(); i++) {
if(strCurrentLine.charAt(i) == 'O') {
laybrinth[counter][counter2] = true; //<-----
counter2++;
}
if(strCurrentLine.charAt(i) == '#') {
laybrinth[counter][counter2] = false; //<-----
counter2++;
}
}
counter++;
counter2 = 0;
}
System.out.println(strCurrentLine);
arrayPrinter(laybrinth);
for(int i = 0; i < laybrinth[0].length; i++) {
if(laybrinth[0] == true) {
this.spielerpositionx = i;
this.spielerpositiony = 0;
break;
}
}
System.out.println();
System.out.println("Die Spielerposition ist: (" + spielerpositionx + "|" + spielerpositiony + ")");
System.out.println("Das ist die Länge des Arrays: " + laybrinth.length);
}
public boolean bewegeDich(char symbol){
switch(symbol) {
case 'o':
if(spielerpositiony == 0) {return false;}
if(laybrinth[spielerpositiony-1][spielerpositionx] == false){return false;}
else {return true;}
//break;
case 'u':
if((laybrinth.length - spielerpositiony) < 0) {return false; }
if(laybrinth[spielerpositiony+1][spielerpositionx] == false){return false;}
else { return true;}
//break;
case 'l':
if((laybrinth[0].length - spielerpositionx) < 0) {return false;}
if(laybrinth[spielerpositiony][spielerpositionx-1] == false){return false;}
else {return true;}
//break;
case 'r':
if((laybrinth[0].length - spielerpositionx) < 0) {return false;}
if(laybrinth[spielerpositiony][spielerpositionx+1] == false){return false;}
else {return true;}
//break;
}
return false;
}
public void arrayPrinter(boolean [][] c) {
for(boolean[] l: c) {
for(boolean m: l) {
System.out.print(m + " | ");
}
System.out.println();
}
}
@Override
public String toString() {
String result = "";
for(int i = 0; i < laybrinth.length; i++) {
for(int j = 0; j < laybrinth.length; j++) {
if(laybrinth[j] == true && i != spielerpositiony && j != spielerpositionx) {
result += "O";
}else if(laybrinth[j] == true && i == spielerpositiony && j == spielerpositionx){
result += "x";
}else if(laybrinth[j] == false) {
result += "#";
}
}
result += "\n";
}
return result;
}
}[/CODE]
[CODE lang="java" title="LabyrinthTest.java [READONLY]"]import java.io.*;
public class LabyrinthTest {
public static void main(String[] args) throws IOException {
Labyrinth[] lab = new Labyrinth[args.length];
for(int i=0; i<args.length; i++) {
lab = new Labyrinth(args);
}
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
char eingabe;
while((eingabe = in.readLine().charAt(0))!='e') {
switch(eingabe) {
case 'u':
case 'o':
case 'l':
case 'r':
for(int i=0; i<lab.length; i++)
System.out.println(lab.bewegeDich(eingabe));
break;
case 'a':
for(int i=0; i<lab.length; i++)
System.out.println(lab);
break;
}
}
}
}[/CODE]