>我正在尝试在此数组的某些值上放置空值:
public ElectricInstallation(){
this.dim1 = (int) Math.random()*85 + 1;
this.dim2 = (int) Math.random()*85 + 1;
this.dim3 = (int) Math.random()*85 + 1;
for(int i = 0; i < this.dim1; i++){
for(int j = 0; j < this.dim2; j++){
for(int k = 0; k < this.dim3; k++){
this.machine[i][j][k] = null;
}
}
}
}
因此,我正在尝试在此数组上创建空值以在此之后执行此操作:
public void makeScenario(){
for(int i = 0; i < this.dim1; i++){
for(int j = 0; j < this.dim2; j++){
for(int k = 0; k < this.dim3; k++){
if(Math.random() < 0.7){
this.machines[i][j][k] = new ElectricMachine((int) Math.random()*15000 + 1);
if(Math.random() < 0.5){
this.machine[i][j][k].clic();
}
}
}
}
}
}
换句话说,我想让一些值成为 ElectricMachine,而另一些值成为空值,但 java 给我这个:"java.lang.NullPointerException"。
我能做什么?
看来你没有初始化你的数组,只声明了它。
您可能应该在构造函数中初始化它,似乎您在那里选择它的大小:
public ElectricInstallation(){
this.dim1 = (int) Math.random()*85 + 1;
this.dim2 = (int) Math.random()*85 + 1;
this.dim3 = (int) Math.random()*85 + 1;
// I think this is the missing part :
this.machine = new ElectricMachine[dim1][dim2][dim3];
for(int i = 0; i < this.dim1; i++){
for(int j = 0; j < this.dim2; j++){
for(int k = 0; k < this.dim3; k++){
this.machine[i][j][k] = null;
}
}
}
}
您还忘记发布堆栈跟踪,以便我们可以看到 NullPointerException 真正发生的位置。如果您已在尚未发布的其他代码中初始化了数组,则 NPE 很可能在 click()
调用中。