压平锯齿状2D阵列

时间:2015-12-12 11:02:39

标签: java

我有一项任务要求我将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}}));

我收到以下错误:

  

数组在元素[9]上不同;预期的&lt; 10&gt;但是&lt; 0&gt;

不知何故,在第3&#34;内部数组的数组长度&#34;超过3,最后2个数字(&#34; 10,11和#34;)不会被复制到新数组中。

1 个答案:

答案 0 :(得分:0)

有多种方法可以解决这个问题,但这一切都归结为你计算错误。

new int[1]中,第一个元素是索引0.在1个元素的数组中,.length将返回1,但不会有array[1]。这就是为什么你错过了1的计数。