2012-04-02 13 views
0

Da ist etwas, das mir hier fehlt. mit diesem Code bekomme ich eine java.lang.NullPointerException:java.lang.NullPointerException beim Füllen eines Arrays von Objekten

public static void main(String[] args) { 

    Board board = new Board(); 
    board.Initialise(); 

} 


public class Board { 

private Obj[][] tableau; 

public void Board() { 

    tableau = new Obj[8][8];  
} 

public void Fill_Board() { 

    tableau[0][0]= new Obj('B'); 
    } 
} 

Aber mit diesem anderen Code bekomme ich keine Fehler. Was mache ich falsch und wie initialisiere ich diese Objektgruppe richtig?

public class Board { 

private Obj[][] tableau = new Obj[8][8]; 

public void Board() { 

} 

public void Fill_Board() { 

    tableau[0][0]= new Obj('B'); 
    } 
} 
+1

Ich denke, Sie müssen uns mehr Kontext zur Verfügung stellen, da Sie eine Klasse Tab haben, aber Sie verwenden es nicht in main() –

+0

@ TerraNova993 Warum formatieren Sie die Änderungen, die Leute vorgenommen haben, um Ihren Code lesbar zu machen? – jzworkman

Antwort

2

Board() endet eine Funktion Mitglied zu sein und kein Konstruktor, und deshalb wird nie genannt. Das Problem ist das void Schlüsselwort, das entfernt werden muss:

public Board() { /* removed the `void' */ 
    tableau = new Obj[8][8];  
} 
+1

Es gibt keine 'Board' Klasse. – Makoto

+0

vielen Dank! – TerraNova993

+0

@Makoto: Es ist eindeutig ("Board Board = neues Board()"). Was wir hier sehen, ist ein Snippet, und ich vermute, dass 'Board()' in 'Tab' zu erscheinen scheint - und nicht in' Board' - ist nur ein Artefakt, das ein Snippet ist. – NPE

0

ich keinen Fehler, wenn ich diesen Code ausführen (Obj zu einer tatsächlichen Klasse zu ändern), können Sie vielleicht ein konkreteres Beispiel mit einem Hauptverfahren zur Verfügung stellen von dem, was du versuchst zu tun?

Wenn Sie einen Konstruktor erstellen, muss er denselben Namen wie Ihre Klasse haben, d. H. Tab und keinen Rückgabetyp haben.

So würden Sie hinzufügen müssen:

public Tab() { 
    // initialization code here 
} 

Sie sind Konstruktor wird ausgeführt, wenn Sie eine neue Instanz dieser Klasse erstellen. Sie möchten damit alle Ihre Variablen initialisieren.

Tab t = new Tab(); // Constructor runs 

Edit:

Sie sind Haupt Methode verwendet Klasse Board aber Sie haben uns genannt Tab eine Klasse gegeben. Ich kann davon ausgehen, dass Sie wirklich Klasse Board wollen, also sollten Sie alle Tab zu Board im obigen Beispiel ändern, wenn das das ist, was Sie suchen.

+0

thnaks, das Problem war, dass der Konstruktor void hatte, also löschte ich void, um einen richtigen Konstruktor zu erstellen, und es funktionierte. – TerraNova993

Verwandte Themen