Hallo Kammeraden.
Hintergrund:
Es sollen Spielsteine auf einem Brett positioniert werden. Auf einem Feld können mehrere Steine stehen. Deshlab wollte ich eine ArrayList machen, in die ich die Spielsteine so Feld (data[][]) dann abspeichern kann.
Bsp. Auf Feld (3,5) stehen 2 Steine.
Also:
data[3][5].addStones(new Spielstein(param); -> für den ersten Stein
data[3][5].addStones(new Spielstein(param); -> für den zweiten Stein
Ich weiß nicht, ob mein Konstrukt dafür gut ist.
Ich weiß nicht, ob ich da irgendwas initialisieren muss!?
Weil ich schrieb ja dann wild ins Array data[][].
Zuerst vielleicht Feld [2][4], dann [5][0]. Die Daten werden aber korrekt übergeben, da habe ich mir schon debug ausgaben reingemacht. ...
Dazu habe ich mir eine Datenstruktur angelegt die wiefolgt aussieht:
Die Klasse Spielstein sieht so aus:
Jetzt möchte ich die Datenstruktur als 2D-Array Nutzen:
Ich bekomme immer eine NullPointerException beim Aufruf von
<B>data[x][y].addStone(st);</b>
Ich stehe auf der Leitung.....
Mir fehlt irgendwie data[x][y] = ....??....;
Quasi Die Initialisierung. Aber mit was soll ich das Initialisieren? SpielStein?
Kann mir jemand helfen, wie mein Konstrukt funktioniert. Irgendwo ist ein Denkfehler drin. Oder das ganze Konstrukt taugt nix.
PS: ich habe nur den relevanten Code stehen gelassen, der mit dem eigenltichen Problem zu tun hat. Wenn der ganze benötigt wird schick ich ihn nach.
Vielen Dank!
Screaper
Hintergrund:
Es sollen Spielsteine auf einem Brett positioniert werden. Auf einem Feld können mehrere Steine stehen. Deshlab wollte ich eine ArrayList machen, in die ich die Spielsteine so Feld (data[][]) dann abspeichern kann.
Bsp. Auf Feld (3,5) stehen 2 Steine.
Also:
data[3][5].addStones(new Spielstein(param); -> für den ersten Stein
data[3][5].addStones(new Spielstein(param); -> für den zweiten Stein
Ich weiß nicht, ob mein Konstrukt dafür gut ist.
Ich weiß nicht, ob ich da irgendwas initialisieren muss!?
Weil ich schrieb ja dann wild ins Array data[][].
Zuerst vielleicht Feld [2][4], dann [5][0]. Die Daten werden aber korrekt übergeben, da habe ich mir schon debug ausgaben reingemacht. ...
Dazu habe ich mir eine Datenstruktur angelegt die wiefolgt aussieht:
Java:
public class GameData {
private ArrayList<SpielStein> spielSteine = new ArrayList<SpielStein>();
public GameData(){
}
public void addStone(SpielStein s){
spielSteine.add(new SpielStein(s.getXPos(), s.getYPos(), s.getCTyp()));
}
public int getNumberOfStones(){
return spielSteine.size();
}
public void deleteList(){
spielSteine.clear();
}
public SpielStein getProperties(int i){
return spielSteine.get(i);
}
}
Java:
public class SpielStein implements CommonGuiInterface{
private int xPos;
private int yPos;
private char cTyp;
private Color color;
public SpielStein(){}
public SpielStein(int x, int y, char c) {
cTyp = c;
xPos = x;
yPos = y;
setColor(cTyp);
}
private void setColor(char cTyp){
if(cTyp =='c'){color =CLIENTBOWL;}
if(cTyp =='s'){color =SERVERBOWL;}
if(cTyp =='n'){color =SPIELFELDCOLOR;}
}
public void setCTyp(char c){
cTyp = c;
}
public char getCTyp(){
return cTyp;
}
public void paintStone(Graphics g){
if(!(cTyp=='n')){
g.setColor(color);
g.fillOval(xPos, yPos, BOWLSIZE, BOWLSIZE);
}
}
public int getXPos(){
return xPos;
}
public int getYPos(){
return yPos;
}
public Color getCColor(){
return color;
}
}
Jetzt möchte ich die Datenstruktur als 2D-Array Nutzen:
Java:
package logic;
import gui.*;
import com.*;
import java.util.*;
import java.awt.event.*;
public class Play implements CommonGuiInterface {
//Datenstrukturen
private GameData[][] data;
int xSize=0;
int ySize=0;
public Play (int x, int y, String adresse, int port, int time) {
xSize = x;
ySize = y;
data = new GameData[xSize][ySize];
}
//Rechnet die Koordinaten fürs Array aus.
private void identifyCoordinates(MouseEvent e){
xAxis = (e.getX()/FIELDSIZE);
yAxis = (e.getY()/FIELDSIZE);
System.out.println("Feldnummer: "+ xAxis+" "+yAxis);
}
public void updateData(int x, int y, int mx, int my){
addBowleToField(x, y, mx, my);
// if(isFull(x, y))calculateNewPositions();
// else return;
}
//Fügt eine Kugel zur Aktuellen Position hinzu
private void addBowleToField(int x, int y, int mx, int my ){
char color ='n';
if (whoseTurnIsIt == 0) color='c';
if (whoseTurnIsIt == 1) color='s';
SpielStein st = new SpielStein(mx,my,color);
data[x][y].addStone(st); /////////////////////// Hier wird die NullPointerException geworfen!
}
}}
Ich bekomme immer eine NullPointerException beim Aufruf von
<B>data[x][y].addStone(st);</b>
Ich stehe auf der Leitung.....
Mir fehlt irgendwie data[x][y] = ....??....;
Quasi Die Initialisierung. Aber mit was soll ich das Initialisieren? SpielStein?
Kann mir jemand helfen, wie mein Konstrukt funktioniert. Irgendwo ist ein Denkfehler drin. Oder das ganze Konstrukt taugt nix.
PS: ich habe nur den relevanten Code stehen gelassen, der mit dem eigenltichen Problem zu tun hat. Wenn der ganze benötigt wird schick ich ihn nach.
Vielen Dank!
Screaper