2016-03-02 207 views
0

我正在Java中工作,我想要介紹一些我需要做的事情。如何使用變量定義維度的數組的數組?

我有一個整數(例如:4),我需要做一個dimmensions數組的數組。

如果是1 ...很容易,因爲我可以寫

int[] v1 = new int[X]; 
在這種情況下,X不要緊

...

,但問題是,當我有例如12。 ..這是一個不好解決的使用方法:

int[][][][][][][][][][][][] v2 = new int[X][X][X][X][X][X][X][X][X][X][X]; 

所以我的問題是: 我怎樣才能使一個循環對於這個問題,避免寫所有的情況下,直到例如30?因爲我認爲這是一個不好的方法。

謝謝。

+2

我可能會開始不使用數組。我也會問自己爲什麼在天堂需要12個維度(!!)。 – Mena

+0

'v1'和'v2'唯一的常見基類型是'Object'。那麼你將如何使用這樣的數組? –

+0

那是因爲我正在做一種動態編程,在任何情況下(真實情況都是nim遊戲),我需要計算一下我們是否可以贏或者放鬆......但是我們需要讓它在事情上節省時間我們以前計算出的...... –

回答

0

請參閱Arrays in JavaJava編程語言中沒有語法「用變量定義數組的維數」

如果你想聲明的整數的二維數組,你必須用Java編寫的源代碼是這樣的:

int[][] matrix; 

如果你要聲明一個整數的三維陣列,你必須寫這樣的事情在Java源代碼中:

int[][][] cube; 

等等。

所以,括號[]的每一對尺寸是必須的。

一般來說,當你必須在編程語言中用這樣的東西來搏鬥時,你應該考慮以不同的方式建模你的問題。

0

我同意使用n維陣列(n = 30)的評論是一個糟糕的設計理念。但是,如果您真的需要它,可能會有幫助:

  1. 您不能動態創建n維數組。您可以查找java.util.ArrayList而不是數組。
  2. 您可以使用一維維陣列。例如:

int [] [] array1 = new int [X] [Y];

它將爲(X * Y)元素創建一個數組。

int [] [] [] array2 = new int [X] [Y] [Z];

它將爲(X * Y * Z)元素創建一個數組。

以上表示也可以被映射到:

int[] array1 = new int[X * Y]; 
int[] array2 = new int[X * Y * Z]; 

說數組2 = [2] [5] [5]; // X = 2,Y = 5,Z = 5

 
    0 1 2 3 4 
0 0 0 0 0 0 
1 0 0 0 0 0 
2 0 0 0 0 0 
3 0 0 0 0 0 
4 0 0 0 0 0 

    0 1 2 3 4 
0 0 0 0 0 0 
1 0 0 0 0 0 
2 0 0 0 0 0 
3 0 0 0 0 0 
4 0 0 0 0 0 

在1-d,這將是:

 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .......... 49 

要訪問3- d array2[1][2][3]在1-d,計算將: array2[(1 * Y * Z) + (2 * Z) + 3 - 1] ie array2 [37]

這很複雜,很難實現,但它會動態的。我會說,你應該重新設計你的方法。