如何区分实例变量与其他变量?

时间:2014-05-29 16:08:42

标签: java

这是我的代码:

        Piece grille[][] = new Piece[9][9];
        grille[0][0] = new Piece(1,joueur1,0);
        grille[8][0] = new Piece(1,joueur2,0);
        grille[0][8] = new Piece(1,joueur2,0);
        grille[8][8] = new Piece(1,joueur1,0);
        grille[0][1] = new Piece(3,joueur2,1);
        grille[1][0] = new Piece(3,joueur2,1);
        grille[1][1] = new Piece(3,joueur2,1);
        grille[7][0] = new Piece(3,joueur1,2);
        grille[7][1] = new Piece(3,joueur1,2);
        grille[8][1] = new Piece(3,joueur1,2);
        grille[7][7] = new Piece(3,joueur2,3);
        grille[7][8] = new Piece(3,joueur2,3);
        grille[8][7] = new Piece(3,joueur2,3);
        grille[0][7] = new Piece(3,joueur1,4);
        grille[1][7] = new Piece(3,joueur1,4);
        grille[1][8] = new Piece(3,joueur1,4);
        grille[3][4] = new Piece(2,joueur1,0);
        grille[5][4] = new Piece(2,joueur2,0);

        for(int i=0; i<9; i++){
            for(int j=0;j<9;j++){
                if(grille[i][j].joueur == null)
                    grille[i][j] = new Piece(0, null,0); //0 correspond a case vide
            }
        }

我在Piece中的实例变量是:

public int type;    
public Joueur joueur;
public int param;

似乎错误来自:grille[i][j].joueur == null

我收到此错误:

  

线程中的异常&#34; main&#34; Citadella的java.lang.NullPointerException。(Citadella.java:35)在Partie.main(Partie.java:8)

2 个答案:

答案 0 :(得分:0)

代码的问题在于阵列中有空位。循环将进行盲调,grille[0][0].joule然后grille[0][1].joule然后grille[0][2]。由于您没有指定grille[0][2],因此它为空。因此你的空指针异常。

答案 1 :(得分:0)

我认为您需要if grille[i][j] == null而不是取消引用joueur。