2016-02-29 75 views
0

所以我有這樣的一段代碼聲明一個三維數組:爲什麼我不能在Java中使用變量來聲明三維數組?

public class Matrix { 
    private static int n; 
    char[][][] matrix = new char[n][n][2]; 
    Matrix(int n){ 
     n=3; 
    } } 

在類的構造函數,正被用一個值初始化(假設3)。

問題是,當我嘗試訪問矩陣元素(讓我們說矩陣[0] [0] [0]),我得到一個「ArrayIndexOutOfBoundsException」。

看來,我的矩陣中有0

長度但是,如果我嘗試類似:

char[][][] matrix = new char[3][3][2] 

它工作得很好,內存alocated的矩陣。

而且,在我的節目,我用在某些時候是這樣的:

char[][] bidimensionalMatrix = new char[n][n]; 

也用得好好的,我可以訪問此一個的元素了。

這是爲什麼?我不允許使用變量來指定三維矩陣的維度?

+2

'N'是'0'陣列被構造時。 –

+1

擴展Oliver的評論。未初始化的數字字段默認爲'0' –

+0

所以你說我的矩陣的內存是在類的構造函數執行之前分配的?因爲它是在這個類的構造函數中初始化的。好吧,我沒有發佈構造函數,我將編輯 –

回答

2

您可以使用變量定義數組的大小。但是,您的構造函數在之後已經初始化了數組,並且當數組初始化時,'n'爲0.請記住,數組大小不能被一旦創建就被更改。相反,你應該在你的構造函數中初始化數組。

public class Matrix { 
    private static int n; 
    char[][][] matrix; 

    Matrix(int num){ 
     n = num; 
     matrix = new char[n][n][2]; 
    } 
} 
+0

是的,它的工作,非常感謝你 –

0

您必須初始化的n前值可以指定數組的大小。

這是一個簡單的類與多個大小的數組。

class Matrix { 
    private int width, height, depth; 
    private char[][][] matrix; 

    public Matrix(int width, int height, int depth) { 
     matrix = new char[height][width][depth]; 
    } 

    public void set(int i, int j, int k, char value) { 
     matrix[i][j][k] = value; 
    } 

    public char get(int i, int j, int k) { 
     return matrix[i][j][k]; 
    } 
} 

樣品運行

class Main { 
    public static void main(String[] args) { 
    Matrix m = new Matrix(2, 2, 2); 
    m.set(0, 0, 0, 'c'); 
    System.out.println(m.get(0, 0, 0)); // c 
    } 
} 
相關問題