IF mit mehrdimensionalem Boolean-Array

Telithanor

Mitglied
Hallo,

bin neu hier und das ist mein erster Beitrag :)

Ok, ich bin grade dabei ein kleines Spielchen zu programmieren. Ich hab ein zweidimensionales Feld mit einem Array erstellt

Java:
Boolean feld[][] = new Boolean[11][21];

ab und zu bekommt einer den wert "true" und dieses Feld soll ausgemalt werden,

aber ich bekomme zwar keinen fehler beim compilen, aber wenn ich das Applet starte bekomme ich beim Interpreter das hier raus:

Exception in thread "Thread-4" java.lang.NullPointerException
at Tetris.male(Tetris.java:99)


Zeile 99 ist dann im unten stehenden Quelltext die Zeile mit der if-bedingung


Java:
    for(int y = 1 ; y <= 20 ; y = y + 1){
      for(int x = 1; x <= 10; x = x + 1){
        if (feld[y][x]==true) stift.fillRect((x*10),(y*10),10,10);
      }
    }


Hilfe! Was ist daran falsch? Der malt garnichts ..

Bitte um Hilfe. Danke im Vorraus

Gruß, Telithanor
 

eRaaaa

Top Contributor
Du hast kein boolean Array sondern ein Boolean Array. D.h. bei new Boolean[11][21]; steht dann zunächst erst einmal überall [c]null[/c] drin ...

(bei boolean feld[][] = new boolean[11][21]; hättest du zumindest dieses Problem erst einmal nicht)
 

Telithanor

Mitglied
Hmm..

1. Was ist der Unterschied zwischen Boolean und boolean (außer das "boolean" im Java-Editor automatisch fett geschrieben wird).

2. Ich hab

Boolean feld[][] = new Boolean[11][21];

in

boolean feld[][] = new boolean[11][21];

geändert, aber das Problem bleibt weiter bestehen.

Bin jetzt echt ratlos. Bitte um Hilfe.


MfG, Telithanor
 

Landei

Top Contributor
Lass dir doch mal im Inneren der inneren Schleife die Werte des Felds mit Koordinaten auf der Konsole ausgeben. Dass ein boolean[]-Feld erst mal mit false initialisiert wird, ist dir aber schon klar?

Außerdem brauchst du niemals [c]if (x == true) [/c] zu schreiben, dann reicht immer [c]if (x) [/c] (analog kannst du statt [c]if (x == false) [/c] bzw. [c]if (x != true) [/c] immer [c]if (! x) [/c] schreiben). [c]x = x + 1[/c] schreibt man (gerade bei Schleifen) als [c]x++[/c].
 
Zuletzt bearbeitet:

Telithanor

Mitglied
Ah das Problem hat sich von selbst gelöst.

Also nicht direkt von selbst. Der Fehler lag hier

if (feld[y][x]==true) stift.fillRect((x*10),(y*10),10,10);

musste so sein:

if (feld[x][y]==true) stift.fillRect((x*10),(y*10),10,10);

x und y mussten vertauscht werden. ;)

Das Array ist ja 11 und 21 groß und nicht umgekehrt. Danke euch trotzdem um Eure Hilfe.

MfG,
Telithanor
 

Murray

Top Contributor
So ein Fehler dürfte aber nicht zu einer NullPointerException, sondern zu einer ArrayIndexOutOfBoundsException geführt haben.
 

Andi_CH

Top Contributor
Bitte Java-Tags verwenden!

Java:
if (feld[x][y]==true)

;(

Java:
if (feld[x][y])
:)

En schöne Tag :)
 

Neue Themen


Oben