2012-08-25 35 views
0

這給我一個錯誤。我認爲這在語法上是正確的。我沒有使用java的經驗。只有C++。有人能告訴我我做錯了什麼嗎?如何在java中定義枚舉二維數組?

private enum Site{ 
    OPEN, BLOCKED } 
Site[][] grid; 

final Site DEFAULT_STATE = Site.OPEN; 
/** 
* Constructor. 
*/ 
public GridClass(int N) 
{ 
    for(int i = 0; i < N; i++) 
    { 
     for(int j = 0; j < N; i++) 
     { 
      grid[i][j] = DEFAULT_STATE; 
     } 
    } 
} 
+2

在第二個循環中,應該是「i ++」還是「j ++」? – DankMemes

+0

我假設你有一個主要的方法嗎? ('public static void main(String [] args)') – wchargin

+0

它是j ++(抱歉編輯錯誤,我想),我有主要方法。我發佈了代碼來解決問題。我會盡量從現在開始更加清楚。 – BobLoblaw

回答

3

你只聲明grid,你沒有定義它。

你需要這樣的東西:

Site[][] grid = new Site[N][N]; 
+0

代碼在方法之外?它是有效的,不是嗎? – DankMemes

+0

方法之外的代碼在哪裏?假設這是全部在一個類中,這是全部有效的('for'循環在構造函數中)。 – wchargin

+0

@ZoveGames此代碼在方法之外有效。它會聲明一個字段「網格」並初始化它。然而,它的意圖是把它放在構造函數中。 – Jeffrey

2

的問題是,你所訪問grid無需分配的內存呢。

添加爲在構造函數的第一行:

grid = new Site[N][N]; 

您收到此錯誤被稱爲NullPointerException因爲grid[i][j]線正在嘗試取消引用空指針是grid


另外,你的第二個for循環說i++;它應該是j++

+0

謝謝,解決了它。 – BobLoblaw

+0

不客氣。 – wchargin

0

您需要在構造函數中創建數組,因爲那是您知道尺寸的地方。這不能在靜態初始化器中完成,因爲N不在該範圍內。

public GridClass(int N) { 
    grid = new Site[N][N]; 
    for (int i=0;i<N;i++) { 
     Arrays.fill(grid[i], DEFAULT_STATE); 
    } 
}