我是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
答案 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;
}