如何将数组[1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12]
转换为2D-Array,如下所示?
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
连续3个数字。
我所尝试的方法返回第一行正确,但其他行与第一行相同。
for (int i = 0; i < array.length; ++i) {
for (int k = 0; k < 3; ++k) {
result[k][i] = args[i];
}
答案 0 :(得分:1)
这对你有用:
for (int i = 0; i < array.length/3; ++i) {
for (int k = 0; k < 3; ++k) {
result[i][k] = args[i*3+k];
}
}
这里我们基于i*3+k
计算源索引数组,以继续获取下一个索引值。
答案 1 :(得分:0)
一行且可解读的解决方案是:
int[] foo = {1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12};
System.out.println(
Arrays.deepToString(
new int[][]
{
Arrays.copyOfRange(foo, 0, 3),
Arrays.copyOfRange(foo, 3, 6),
Arrays.copyOfRange(foo, 6, 9),
Arrays.copyOfRange(foo, 9, 12)
}
)
);
<强>输出强>
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
注意强>
方法Arrays.copyOfRange
仅适用于Java 6。
否则,您必须使用返回System.arrayCopy
的{{1}}(不适用于示例)。
答案 2 :(得分:0)
arr1 - 输入数字
的数组arr2 - 输出数字
的数组for(int i=0;i<arr1.length;i++)
for(int j=0;j<3;j++)
arr2[i][j]=arr1[i*3+j];