我有一项任务要求我将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;)不会被复制到新数组中。
答案 0 :(得分:0)
有多种方法可以解决这个问题,但这一切都归结为你计算错误。
在new int[1]
中,第一个元素是索引0.在1个元素的数组中,.length
将返回1
,但不会有array[1]
。这就是为什么你错过了1的计数。