2014-02-27 80 views
1

我試圖把空值這個陣列的一些值:爪哇 - 試圖把空值的陣列

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」。

我該怎麼辦?

回答

1

看來你沒有初始化你的數組,只聲明它。

你或許應該初始化它在構造函數中,有它似乎你選擇它的尺寸有:

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()調用。