是什么导致了这个java.lang.NullPointerException错误?

时间:2014-11-24 18:24:49

标签: java nullpointerexception

我是Java的新手,我已经浏览了整个互联网和stackoverflow本身,以了解我做错了什么,没有运气。有人可以告诉我为什么会收到此错误?我认为我已经以正确的方式初始化了数组,我认为我也正确地实例化了它。

public class Grid {

 private Slot[][] array = new Slot[12][12];

 public Grid(){};


 public void printarray(){   

    for(int i = 1 ; i <= 10 ; i++){
        System.out.print(i + "|" + "");
        for(int j = 1 ; j <= 10 ; j++){     

            System.out.print(array[i][j].getStatus());

        }//end inner for        

        System.out.print("\n");
    }//end outer for 
    System.out.print("\n");

};

}//end of class




public class Slot {


    public Slot(){};


    public int getStatus() {
        return status;
    }
    public void setStatus(int status) {
        this.status = status;
    }


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    private int status = 0 ;
    private int id = 0 ;

}//end of slot

public static void main(String[] args) {
    Grid myGrid = new Grid();
    myGrid.printarray();
}//end of main

2 个答案:

答案 0 :(得分:3)

您已正确初始化阵列,但它仍然是空的。您需要创建类型为Slot的对象并填充数组,然后才能将对象拉出并调用它们上的方法。

System.out.print(array[i][j].getStatus());

该行正在尝试从数组的位置i,j中提取Slot,但那里没有任何内容,因此返回null。在getStatus()引用上调用null会导致异常。

答案 1 :(得分:0)

问题是您的数组在每个位置都使用空值进行初始化。如果您不希望值为null,则应使用构造函数中的值对其进行初始化。同样在您的print语句中,您不是仅打印前10行的前10个元素的所有元素。

由于您在全球级别声明它:

private Slot[][] array = new Slot[12][12];

每个位置array[number][number]都将以null作为初始值。您可以在构造函数中初始化,如:

public Grid(){
   for(int i = 0 ; i < 12 ; i++){
       for(int j = 0 ; j < 12 ; j++){
           array[i][j] = new Slot(0, 0);
       }
   }
}

public Slot(int id, int status){
     this.id = id;
     this.status = status;
}