是什么导致此java.lang.NullPointerException错误?
我对Java是相当陌生的,我已经浏览了整个互联网和stackoverflow本身,以了解我做错了什么,但没有运气。有人能告诉我为什么我会犯这个错误吗?我认为我已经以正确的方式初始化了数组,并且我认为我也正确地实例化了它是什么导致此java.lang.NullPointerException错误?,java,nullpointerexception,Java,Nullpointerexception,我对Java是相当陌生的,我已经浏览了整个互联网和stackoverflow本身,以了解我做错了什么,但没有运气。有人能告诉我为什么我会犯这个错误吗?我认为我已经以正确的方式初始化了数组,并且我认为我也正确地实例化了它 public class Grid { private Slot[][] array = new Slot[12][12]; public Grid(){}; public void printarray(){ for(int i = 1 ; i &
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
公共类网格{
专用插槽[][]阵列=新插槽[12][12];
公共网格(){};
public void printary(){
对于(int i=1;i您已经正确初始化了数组,但它仍然是空的。您需要创建Slot
类型的对象并填充数组,然后才能拉出对象并对其调用方法
System.out.print(array[i][j].getStatus());
该行试图从数组的位置i,j中拉出一个插槽
,但那里什么都没有,因此它返回null
。调用getStatus()
在null
引用上导致异常。问题是数组在每个位置都用null初始化。如果不希望值为null,则应在构造函数中用值初始化它。此外,在print语句中,您没有打印所有元素,只打印前10个元素十排
由于您在全局级别声明了它:
private Slot[][] array = new Slot[12][12];
每个位置数组[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;
}
公共网格(){
对于(int i=0;i<12;i++){
对于(int j=0;j<12;j++){
数组[i][j]=新时隙(0,0);
}
}
}
公共插槽(int id,int状态){
this.id=id;
这个状态=状态;
}
哪一行抛出NPE?我猜是System.out.print(数组[i][j].getStatus());
。您创建了一个数组,但从未将任何内容放入其中。private Slot[][]array=new Slot[12][12];
不会自动将插槽放入其中。System.out.print(数组[i][j].getStatus());是抛出NPEYou需要的类似于array[0][0]=new Slot()的NPEYou的东西在C++中,我做了同样的事情,网格构造函数调用每个时隙的构造函数,这样就不需要手工创建它们,java是否处理不同的情况?如果你想要一个12x12的时隙对象数组,那么你需要Cre。ate 144个插槽对象。@Lucawuz是的,您需要一个循环或其他代码来创建这些对象并将它们添加到数组中。Java中的新插槽[12][12]
只为您创建空数组。哦,我明白了,谢谢。所以新插槽[12][12]不调用插槽构造函数?@Lucawuz不,它只创建数组。它不调用Slot
构造函数。对于我希望它做的打印部分,我不明白为什么我的元素没有初始化,网格构造函数不应该自己调用插槽构造函数144次吗?@Lucawuz不,你必须初始化eac数组的h元素,如上图所示,我为Grid类发布了一个构造函数示例。@Lucawuz我给了您一个示例,说明了这两个构造函数的外观。