eine kurze Grundübersicht: Ich habe ein 2D-Array, das als Spielbrett dient und auf dem Figuren abgesetzt werden. Das hinzufügen der Figuren klappt ohne Probleme. Bei der Ausgabe bekomme ich ein Array voller null-Einträge, bis auf die Positionen auf denen eine Figur steht, da bekomm ich einen Namen ausgegeben. Sobald eine Figur erstellt wird, wird Sie einem Array in der Klasse GameStone von maximal 11 Feldern hinzugefügt (max. 11 Spielfiguren pro Spieler). Nun will ich das Spielbrett durchgehen, und alle Spielfiguren ohne die null-Positionen ausgeben lassen. Hierzu unten die for-Schleife. Leider bekomme ich eine NullPointerException und ich weiß einfach nicht warum... Meine Vermutung ist, dass der Fehler an dem null-Vergleich in der if-Bedingung liegt? Oder da ich das Array ja bereits mit 11 Plätzen initialisiere, und daher auch hier noch null-Einträge sind und die Schleife deshalb crasht??
String pos0 ="";for(int i =0; i <GameStone.stonesR.length; i++){if(field.getField(GameStone.stonesR[i].getX(),GameStone.stonesR[i].getY())!=null){
pos0 =GameStone.stonesR[i].getName();
Also aus Deinen Informationen kann man nicht ablesen, wo der Fehler ist. Wenn in der if Zeile die NPE auftritt, dann ist entweder
- field,
- GameStone (So das keine Klasse ist) oder
- GameStone.stonesR
null.
Wie hast Du die Werte jeweils initialisiert? So Gamestone eine Klasse ist und stonesR ein public static Feld: Mach ein ordentliches Objektorientiertes Design! Das sind so Dinge, die man von Anfang an sein lassen sollte!
Also aus Deinen Informationen kann man nicht ablesen, wo der Fehler ist. Wenn in der if Zeile die NPE auftritt, dann ist entweder
- field,
- GameStone (So das keine Klasse ist) oder
- GameStone.stonesR null.
Durch den Einschub hier unten konnte ich es lösen Vielen Dank!
Java:
if(GameStone.stonesR[i]==null){continue;}
@kneitzel "So Gamestone eine Klasse ist und stonesR ein public static Feld" das trifft zu. Du meinst ich soll das Feld private setzen und dann ordentlich über getter darauf zugreifen?
@kneitzel "So Gamestone eine Klasse ist und stonesR ein public static Feld" das trifft zu. Du meinst ich soll das Feld private setzen und dann ordentlich über getter darauf zugreifen?
Kurze Frage noch hierzu: static bedeutet doch nur, dass ich von anderen Klassen direkt darauf zugreifen kann oder? Was ist der Hintergrund, warum es wichtig ist dies möglichst nicht zu verwenden?
Das ist wie in der realen Welt: Du willst keine Baupläne (Klassen) sondern reale Objekte haben, um damit etwas zu machen. Bei der objektorientierten Entwicklung wird sich genau an sowas orientiert.
Und unter dem Strich hat das ganz viele Gründe, wieso das besser ist:
- So benutzt Du erstellte Objekte mit Ihrem Verhalten. Der Aufbau oder wie diese genau funktionieren interessieren Dich nicht mehr. (Im Gegensatz zu deiner Implementation, wo die Inhalte von Gamestone sogar frei von außen verändert werden können ...)
- Klar definierte Abhängigkeiten - Es kann nicht mehr wild auf alles Zugegriffen werden.
- Vielseitigkeit - Durch dieses static hast Du das genau ein mal. Aber stell Dir vor, Du willst das später erweitern: Dann brauchst Du davon mehrere Instanzen....
- ...
static bedeutet doch nur, dass ich von anderen Klassen direkt darauf zugreifen kann oder? Was ist der Hintergrund, warum es wichtig ist dies möglichst nicht zu verwenden?