2014-03-12 45 views
1

這可能是一個愚蠢的問題,但爲什麼我在這裏得到一個空指針異常? 我想繪製一個java小程序的瓷磚地圖。我只是貼上了問題區域。空指針異常Java與繪圖二維數組列表

private int[][] map;  
public void init() 
{ 
    int map[][]={ {0,0,0}, 
       {1,1,0}, 
       {0,0,0} }; 

} 
public void drawCaveTiles(Graphics g) 
{ 
    for(int i = 0; i <= 3; i++) 
    { 
     for(int j = 0; j <= 3; j++) 
     { 
      if(map[i][j] == 1) 
      { 
       g.drawImage(snow_brick, i*64, j*64, this); 
      } 
      if(map[i][j] == 0) 
      { 
       g.drawImage(black, i*64, j*64, this); 
      } 
     } 
    } 

} 

我的方法init()固定它

​​
+0

修復空指針異常之後,您的代碼中有另一個邏輯問題。在'drawImage'裏面使用循環變量'i'和'j'的方式是錯誤的。 'i'是你的數組的行,因此是y座標,'j'是列和x座標。如果您已經考慮了行,x座標和列,y座標之間的區別,請使用轉置數組,請將此註釋視爲可忽略。 – halex

回答

1
int map[][]={ {0,0,0}, 
       {1,1,0}, 
       {0,0,0} }; 

在這裏,你正在創建一個新的地圖,是本地方法init(),而不是初始化實例成員map

將其更改爲

map ={ {0,0,0}, 
       {1,1,0}, 
       {0,0,0} }; 

並確保您調用drawCaveTiles()方法之前調用inti()方法。

或者因爲它是一個靜態數據。移動該行以聲明地點。

1

在你init()方法,你都躲在類字段map,因爲你又宣佈它(在方法init()的局部塊)。

此外,請確保您正在調用init()方法。它應該被稱爲在構造函數:

public class YourApplet { 
    public YourAppler() { 
     init(); 
    } 

    public void init() 
    { 
     map[][]={ {0,0,0}, 
       {1,1,0}, 
       {0,0,0} }; 
    } 
} 
1

局部變量int map[][]init()被遮蔽的實例變量private int[][] map;。不要在init()方法中創建新的本地int map。只需使用init()方法中的全局地圖數組。

public void init() { 
    map={ {0,0,0}, {1,1,0}, {0,0,0} }; 
}