ArrayOutOfBoundsException bei boolean Array

Kirby.exe

Top Contributor
Ich verstehe nicht ganz warum ich, wenn ich versuche eine outOfBoundsException bekomme, da ich doch die Größe des Arrays aus einer Datei einlese und dann setze :(

Das ist die getestete Datei:

Code:
4
3
O#O
OO#
#OO
#O#

Und das ist meine Klasse:

Java:
import java.io.*;
import java.util.Arrays;

public class Labyrinth {

    private int playerpositionx;
    private int playerpositiony;
    private int arrayWidth;
    private int arrayLength;
    private boolean [][] gameboard = new boolean[arrayLength][arrayWidth];
    
    Labyrinth(String filename) throws IOException{
        int counter = 0, counter2 = 0, checking = 0;
        BufferedReader objReader = null;
        //try {
           String strCurrentLine;
           objReader = new BufferedReader(new FileReader(filename));
           while ((strCurrentLine = objReader.readLine()) != null) {
               System.out.println("Checking: " + checking);
               System.out.println("Counter Vertikal: " + counter);
               System.out.println("Counter Horizontal: " + counter2);
               //System.out.println(Arrays.toString(gameboard));
              
               if(checking == 0) {
                   arrayLength = Integer.parseInt(strCurrentLine);
                   System.out.println("Length: " + arrayLength);
                   checking++;
               }else if(checking == 1){
                   arrayWidth = Integer.parseInt(strCurrentLine);
                   System.out.println("Width: " + arrayWidth);
                   checking++;
               }else {
                   for(int i = 0; i < strCurrentLine.length(); i++) {
                       if(strCurrentLine.charAt(i) == 'O') {
                           gameboard[counter][counter2] = true;  //<-----
                           counter2++;
                       }
                       if(strCurrentLine.charAt(i) == '#') {
                           gameboard[counter][counter2] = false; //<-----
                           counter2++;
                       }
                   }
                   counter++;
                   counter2 = 0;
               }
               System.out.println(strCurrentLine);
           }
          
      arrayPrinter(gameboard);
      
      for(int i = 0; i < gameboard[0].length; i++) {
           if(gameboard[0][i] == true) {
               this.playerpositionx = i;
               this.playerpositiony = 0;
               break;
           }
       }
      System.out.println();
      System.out.println("Die Spielerposition ist: (" + playerpositionx + "|" + playerpositiony + ")");
      System.out.println("Das ist die Länge des Arrays: " + gameboard.length);
        
    }
    public boolean bewegeDich(char symbol){
        
        switch(symbol) {
            case 'o':
                if(playerpositiony == 0) {return false;}
                if(gameboard[playerpositiony-1][playerpositionx] == false){return false;}
                else {return true;}
                //break;
            case 'u':
                if((gameboard.length - playerpositiony) < 0) {return false;    }
                if(gameboard[playerpositiony+1][playerpositionx] == false){return false;}
                else { return true;}
                //break;
            case 'l':
                if((gameboard[0].length - playerpositionx) < 0) {return false;}
                if(gameboard[playerpositiony][playerpositionx-1] == false){return false;}
                else {return true;}
                //break;
            case 'r':
                if((gameboard[0].length - playerpositionx) < 0) {return false;}
                if(gameboard[playerpositiony][playerpositionx+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 < gameboard.length; i++) {
            for(int j = 0; j < gameboard[i].length; j++) {
                if(gameboard[i][j] == true && i != playerpositiony && j != playerpositionx) {
                    result += "O";
                }else if(gameboard[i][j] == true && i == playerpositiony && j == playerpositionx){
                    result += "x";
                }else if(gameboard[i][j] == false) {
                    result += "#";
                }
            }
            result += "\n";
        }
        return result;
    }
}
 

mihe7

Top Contributor
Äh, lass mal, Du prüfst ja vorher ab, ob es sich um ein '#' oder '0' handelt... An welcher Stelle bekommst Du denn die Exception?
 

Kirby.exe

Top Contributor
Habe geschaut, aber es hat die Länge 3, also keine Leerzeichen :( Liegt wahrscheinlich an meinen Counter Variablen, jedoch verstehe ich nicht ganz wieso xD

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Labyrinth.<init>(Labyrinth.java:36)
 

Kirby.exe

Top Contributor
Danke es geht xD Jetzt fühle ich mich verarscht hahaha ich dachte ich habe irgendeine besondere Exception bei 2D Arrays nicht bedacht xD
 

mihe7

Top Contributor
Und verwende try-with-resources - auch, wenn Du keinen catch-Block hast. Ich würde das auch etwas anders schreiben:

Java:
        try(BufferedReader objReader = new BufferedReader(new FileReader(filename))) {
            arrayLength = Integer.parseInt(objReader.readLine());
            arrayWidth = Integer.parseInt(objReader.readLine());

            gameboard = new boolean[arrayLength][arrayWidth];

            for (int i = 0; i < arrayLength; i++) {
                String strCurrentLine = objReader.readLine();

                for (int k = 0; k < strCurrentLine.length(); k++) {
                    gameboard[i][k] = strCurrentLine.charAt(k) == 'O';
                }
            }
        }
 

Kirby.exe

Top Contributor
Mal eine blöde Frage aber wie weiß das Programm in deinem Code, dass er nach einlesen von arrayLength eine Zeile weiter gehen soll?

Oder jumpt readLine sofort in die nächste Zeile?

Ich hatte erst einen catch block, jedoch wird in der Test Klasse der Uni keine Exception geworfen und ich kann diese nicht anpassen :(
 

mihe7

Top Contributor
in der Test Klasse der Uni
Oh, da musst Du allerdings aufpassen, ob Du zusätzliche Prüfungen brauchst (z. B. vorzeitiges Dateieende, falsche Zeichen in der Datei, ungültige Zeilenlänge etc.)

Mein Code geht einfach davon aus, dass die Datei in Ordnung ist. Enthält die Datei z. B. mehr Zeilen als anfangs angegeben, interessiert das meinen Code nicht. Enthält sie weniger, kommt es automatisch zu einer NullPointerException. Auch interessiert den Code nicht, welches Zeichen für false verwendet wird.
 

Kirby.exe

Top Contributor
Also ich habe noch einmal in die Aufgabenstellung geschaut und dort steht dass man davon ausgehen kann dass alle Datei im richtigen Format sind...naja in meinen Augen hätte ich trotzdem gerne einen try catch block eingefügt um auch gegen den "DAU" zu punkten xD
 

mihe7

Top Contributor

Kirby.exe

Top Contributor
Okii :) Also ich habe den Code auch mehr oder weniger fertig xD Hab noch ein paar Exceptions in der bewegeDich Methode aber das liegt daran dass man um 2 Uhr nachts sich sehr gut konzentrieren kann kappa xD
 

Kirby.exe

Top Contributor
Dieser Moment wenn man seinen eigenen Code durchgeht und man sich fragt ob man eigentlich komplett dumm ist hahaha :) Ich habe solche idiotischen Fehler entdeckt xD
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Vector schmeißt arrayOutOfBoundsException :( Java Basics - Anfänger-Themen 20
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
Zentriks Hilfe zu Sieb des Eratosthenes ohne boolean Java Basics - Anfänger-Themen 5
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
B Rückgabewert boolean Java Basics - Anfänger-Themen 8
J Compiler-Fehler Harshadzahlen mit Boolean Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
A Boolean Java Basics - Anfänger-Themen 5
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
J Boolean[] teilen Java Basics - Anfänger-Themen 13
S public static boolean Java Basics - Anfänger-Themen 4
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
L Überschriebene Boolean Statements Java Basics - Anfänger-Themen 2
L boolean-Abfrage enumeration Java Basics - Anfänger-Themen 3
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
I converting boolean Array to String Array Java Basics - Anfänger-Themen 10
C Java Boolean reagiert nicht Java Basics - Anfänger-Themen 18
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
K Boolean in einer erstellten Klasse verwenden Java Basics - Anfänger-Themen 14
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
A Boolean in String Java Basics - Anfänger-Themen 2
S Operatoren Boolean Vergleichsoperator Java Basics - Anfänger-Themen 7
Queiser Super boolean Java Basics - Anfänger-Themen 11
E ISBN Nummer mit boolean Java Basics - Anfänger-Themen 5
W In Methode boolean array zurückgeben Java Basics - Anfänger-Themen 3
B Math.random mit Boolean array? Java Basics - Anfänger-Themen 17
Z Boolean Abfrage in einer for each Schleife Java Basics - Anfänger-Themen 2
T Methoden Boolean wird nicht gesetzt Java Basics - Anfänger-Themen 1
H boolean Array Problem Java Basics - Anfänger-Themen 7
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
O boolean Array Frage! Java Basics - Anfänger-Themen 4
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
M Erste Schritte while boolean=false läuft nur bei true??? Java Basics - Anfänger-Themen 23
D Boolean Array initialisieren Java Basics - Anfänger-Themen 4
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
A Problem beim Deklarieren von einem BOOLEAN Java Basics - Anfänger-Themen 4
W Interpreter-Fehler boolean nur eins darf wahr sein Java Basics - Anfänger-Themen 11
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
V Methode erstellen für ein Boolean Array Java Basics - Anfänger-Themen 13
T Boolean by Reference Java Basics - Anfänger-Themen 6
L Wertebereich von boolean Java Basics - Anfänger-Themen 4
D Erklärung static boolean Java Basics - Anfänger-Themen 6
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
J Datentypen Boolean Refferenz Objekt Java Basics - Anfänger-Themen 2
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Boolean Missing return Statement?! Java Basics - Anfänger-Themen 2
A Boolean aus dem ActionlListener Java Basics - Anfänger-Themen 1
T hashCode mit boolean Java Basics - Anfänger-Themen 1
T boolean, was passiert hier? Java Basics - Anfänger-Themen 4
M Sind solche boolean Anweisen empfehlenswert? Java Basics - Anfänger-Themen 3
N Boolean Werte - immer "false" Java Basics - Anfänger-Themen 5
J GUI per Boolean steuern Java Basics - Anfänger-Themen 3
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
K Viergewinnt - boolean Problem Java Basics - Anfänger-Themen 2
S Best Practice Boolean mit IF verbinden Java Basics - Anfänger-Themen 7
D Boolean mit String Java Basics - Anfänger-Themen 2
K Methode ohne Rückgabewert in boolean Methode ändern Java Basics - Anfänger-Themen 6
E 2 dimensionales Boolean Array Java Basics - Anfänger-Themen 5
B assertArrayEquals nicht für boolean[]? Java Basics - Anfänger-Themen 2
M !boolean das selbe wie boolean == false? Java Basics - Anfänger-Themen 3
L Boolean Methode wirft Fehler aus Java Basics - Anfänger-Themen 12
M Erste Schritte boolean: ist Zahl Hexadezimal - Lösung verwirrend Java Basics - Anfänger-Themen 6
F Datentypen Frage nach Boolean Java Basics - Anfänger-Themen 11
C Sieb des Eratosthenes ohne boolean Java Basics - Anfänger-Themen 20
B Boolean abfrage Java Basics - Anfänger-Themen 3
L The operator && is undefined for the argument type(s) String, boolean Java Basics - Anfänger-Themen 8
L Methoden Boolean-Methode Java Basics - Anfänger-Themen 16
S Setter Methode von Boolean Java Basics - Anfänger-Themen 11
W Datentypen Zweidimensionales Boolean Array Java Basics - Anfänger-Themen 13
P Compiler-Fehler Boolean: Missing Return Statement Java Basics - Anfänger-Themen 4
M int & boolean Java Basics - Anfänger-Themen 12
feardorcha boolean array false - true - Abfrage Java Basics - Anfänger-Themen 10
R boolean, if-else Java Basics - Anfänger-Themen 7
J Variablen Boolean true "übersetzen" in String Java Basics - Anfänger-Themen 10
M Meldung "cannot convert flom boolean to boolean[]" Java Basics - Anfänger-Themen 3
S Name eines boolean ausgeben (nicht den Wert) Java Basics - Anfänger-Themen 43
S Variablen Prüfen, ob einer von vielen boolean true ist Java Basics - Anfänger-Themen 8
D boolean te wird nicht verwendet Java Basics - Anfänger-Themen 2
M Bedingte Anweisung mit Boolean Java Basics - Anfänger-Themen 2
C cannot convert from int to boolean Java Basics - Anfänger-Themen 3
T Variablen boolean-wert wird nicht gesetzt Java Basics - Anfänger-Themen 6
A In Methode boolean ändern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben