2015-12-12 149 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的计数。