2015-12-12 142 views
0

我有一項任務,要求我將2D數組拼成單個數組。拼合成鋸齒狀的2D陣列

這是我到目前爲止有:

public static int[] flatenArray(int [][] a){ 
    //TODO 
    int length = 0; 

    for(int y = 0; y < a.length; y++){ 
     length += a[y].length; 
    } 

    int[] neu = new int[length]; 

    int x = 0; 
    for (int i = 0; i < a.length; i++){ 
     for(int j = 0; j < a[0].length; j++){ 
      neu[x] = a[i][j]; 
      x++; 
     } 
    } 
    return neu; 
} 

在做一個JUnit測試以下測試用例

assertArrayEquals(new int[] {1,2,3,4,5,6,7,8,9,10,11},Ass06.flatenArray(new int[][] {{1,2,3},{4,5,6},{7,8,9,10,11}})); 

我收到以下錯誤:

arrays differed at element[9]; expected <10> but was <0>

不知怎的,在第三個「內部陣列」的陣列長度超過3的點,最後2個數字(「10,11」)未被複制進入新陣列。

+2

'a [0] .length' - >'a [i] .length'。投票結束爲錯字。 – dasblinkenlight

+0

@dasblinkenlight感謝隊友!這解決了它:)必須錯過! – Nezzrak

回答

0

有多種方法可以解決這個問題,但這一切都歸結爲你計算錯誤的原因。

new int[1],第一元件是索引0。在1個元件的陣列,.length將返回1,但不會有array[1]。這就是爲什麼你錯過了1的計數。