2016-02-20 189 views
0

我需要一個多維數組,並壓平,這樣,如果陣列的樣子:拼合2D或3D陣列中的Java

[1,2,3] 
[4,5,6] 

然後將其轉化爲:

[1,2,3,4,5,6] 

我也需要適應3D陣列並將它們弄平。

這裏是我這麼遠......

class ArrayOperations { 
private int[] postFlattenedArray; 

public ArrayOperations { 

flattenedArray = new int[arrayDimensions[0]]; 
// arrayDimesnsions of 3,4 is a a 3x4 array; 3,4,5 is a 3x4x5 array 

//set up ints to hold total size and dimensionality of array 
int prod = 1 
int dimensions = 0; 

newArray = new int[prod - 1]; 

for (int i: arrayDimensions) { 
    prod = prod * i; 
    dimensions += 1; 
    } 
int k = 0; 

for (int i: arrayDimensions){ 
for (int j = 0; j <= i; j++){ 
    newArray[k++] = flattenedArray[j][0][0] 
} 
} 

} 

我知道我需要運行一些嵌套的for循環,但我有很難理解我怎麼會爲不同的陣列尺寸做到這一點。所以如果數組有尺寸; 3,5,6然後我不知道如何運行一個循環,使其遍歷像:

[1..4][0][0], [0][1..5][0], [0][0][1..6] 

回答

0

這似乎是最簡單的解決方案是實現一個遞歸函數flatten(這可能會成爲通用的能夠處理任何數組),如果數組已經是平坦的,或者遞歸地調用它自己的所有內部數組並連接結果,它將返回數組本身。

0

試試這個。

static void flatten(Object object, List<Integer> list) { 
    if (object.getClass().isArray()) 
     for (int i = 0; i < Array.getLength(object); ++i) 
      flatten(Array.get(object, i), list); 
    else 
     list.add((int)object); 
} 

static int[] flatten(Object object) { 
    List<Integer> list = new ArrayList<>(); 
    flatten(object, list); 
    int size = list.size(); 
    int[] result = new int[size]; 
    for (int i = 0; i < size; ++i) 
     result[i] = list.get(i); 
    return result; 
} 

int[][][] array = { 
    {{1, 2, 3}, {4, 5}}, 
    {{6}, {7, 8, 9}}, 
}; 
System.out.println(Arrays.toString(flatten(array))); 
// -> [1, 2, 3, 4, 5, 6, 7, 8, 9]