tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
663
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    screaper screaper ist offline Mitglied Bronze
    Registriert seit
    Apr 2009
    Beiträge
    48
    Hallo Kammeraden.

    Ich habe mir eine datenstruktur angelegt die Wiefolgt aussieht:

    PHP-Code:
    public class GameData {

        private 
    ArrayList<SpielSteinspielSteine = 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);
        }
        


    Die Klasse Spielstein sieht so aus:

    PHP-Code:
    public class SpielStein implements CommonGuiInterface{

        private 
    int xPos;
        private 
    int yPos;
        private 
    char cTyp;
        private 
    Color color;
        
        
        
        public 
    SpielStein(){}
        
        public 
    SpielStein(int xint ychar 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(xPosyPosBOWLSIZEBOWLSIZE);        
        }
            }
        
        
        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:

    PHP-Code:
    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 xint yString adresseint portint 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 xint yint mxint my){
            
    addBowleToField(xymxmy);
        
    //    if(isFull(x, y))calculateNewPositions();
        //    else return;

        
    }

        
    //Fügt eine Kugel zur Aktuellen Position hinzu
        
    private void addBowleToField(int xint yint mxint my ){
            
            
    char color ='n';
            if (
    whoseTurnIsIt == 0color='c';
            if (
    whoseTurnIsIt == 1color='s';
            
    SpielStein st = new SpielStein(mx,my,color);
            
    data[x][y].addStone(st);
        }
        
    }} 
    Ich bekomme immer eine NullPointerException beim Aufruf von
    <B>data[x][y].addStone(st);</b>

    Ich stehe auf der Leitung.....

    Kann mir jedmand 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
     

  2. #2
    bergonline bergonline ist offline Mitglied Platin
    Registriert seit
    Jul 2006
    Beiträge
    518
    Hi,


    ändere mal folgendes, da es bei dir unnnötig ist.

    PHP-Code:
        public GameData(){
            
            }
        
            public 
    void addStone(SpielStein s){
        
            
    spielSteine.add(new SpielStein(s.getXPos(), s.getYPos(), s.getCTyp()));
            
        } 
    PHP-Code:
        public GameData(){
            
            }
        
            public 
    void addStone(SpielStein s){
        
            
    spielSteine.add(s);
            
        } 
    bo
     

  3. #3
    screaper screaper ist offline Mitglied Bronze
    Registriert seit
    Apr 2009
    Beiträge
    48
    Hi danke für die schnelle Antwort,
    aber ich hatte es erst so und es ging auch nicht....

    Gruß Screaper
     

  4. #4
    bergonline bergonline ist offline Mitglied Platin
    Registriert seit
    Jul 2006
    Beiträge
    518
    Hey,

    habe ja auch nicht gesagt, dass es schon geht :P
    Gucke noch drauf, wollte es aber erstmal loswerden.


    Bist du dir sicher, dass das Array bzw deren Länge nicht überschritten wird?

    Wenn du GameData[3][3] anlegst, dann würde addstone bei x=3 y=2 ja streiken.
    Ich finde vorerst keinen Arrayfehler.

    bo
     

  5. #5
    screaper screaper ist offline Mitglied Bronze
    Registriert seit
    Apr 2009
    Beiträge
    48
    Vielleicht nochmal als Hintergrundifo:


    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. ...
     

  6. #6
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Ein Array welches du mit new XYZ[5] anlegst, bietet Platz für 5 Element. Initial sind aber alle Elemente leer. Diese musst du in einer entsprechende Schleife erstmal füllen.

    Ansonsten bekommst du natürlich eine NullPointerException. In einer Exception wird dir immer die Zeile angegeben in der sie auftritt. Bei einer NullPointerException ist immer irgendwas vor dem Punkt null. Ist also recht einfach zu finden.
     

  7. #7
    screaper screaper ist offline Mitglied Bronze
    Registriert seit
    Apr 2009
    Beiträge
    48
    Das Problem ist, dass ich a nciht weiß mit was ich es befüllen soll! UNd wenn ich es befüllen möchte kommt die NullPointerException. Ich hatte ja oben beschrieben, dass es bei der AddStones-Anweisung auftritt.

    Aber irgendwo ist da der Denkfehler versteckt...
     

  8. #8
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Wie gesagt du musst mit einer Schleife alle Element im Array mit new XYZ() initialisieren.
     

  9. #9
    bergonline bergonline ist offline Mitglied Platin
    Registriert seit
    Jul 2006
    Beiträge
    518
    Hi,

    Zitat Zitat von zeja Beitrag anzeigen
    Wie gesagt du musst mit einer Schleife alle Element im Array mit new XYZ() initialisieren.
    PHP-Code:
    for(int x=xxmax;x++){
    for(
    int y=yymax;y++){
    data[x][[y] = new GameData();
    }


    bo
     

Ähnliche Themen

  1. Tomcat 5.5: Eigener Realm funktioniert nicht
    Von henning-malaysia im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 28.04.09, 14:57
  2. Eigener Editor - isDirty() funktioniert nicht richtig
    Von thommyslaw im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 24.05.08, 21:17
  3. Eigener Datentyp
    Von FlashMX im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 19.12.06, 20:02
  4. Antworten: 12
    Letzter Beitrag: 19.04.06, 10:55
  5. Eigener Datentyp ?
    Von Railer im Forum .NET Archiv
    Antworten: 6
    Letzter Beitrag: 22.10.04, 16:56