好的我试着循环一个二维数组从一个数据复制到另一个。我可以使用:
分配第一部分的整数array1[i] = array2[i];
但我不能对其他部分做同样的事情,例如:
array1[][j] = array2[][j]; //this doesn't compile
OR
array1[0]j = array2[0][j]; //creates run time error
我怎样才能明确复制第二部分而不是第一部分?
答案 0 :(得分:5)
没有二维数组的“第一部分”和“第二部分”。在声明为i
的数组中有j
行和x[j][i]
列。
现在技术方面:
Java没有真正的二维数组;它有数组数组,因此x[rows][cols]
是x
rows
个cols
元素数组的数组x[rows]
(即array1[i] = array2[i]
是一个数组数组。)
因此,当您执行x
时,您正在复制对第二个数组中列数组的引用。
但是没有办法做镜像 - 你不能复制对行的引用但保留列值,因为行的数组是 for (int row = 0; row < array1.length; row++) {
for (int col = 0; col < array1[row].length; col++) {
array2[row][col] = array1[row][col];
}
}
。< / p>
如果您正在寻找“深层复制”,可以使用以下方式手动完成:
{{1}}
答案 1 :(得分:3)
你的意思并不清楚。请记住,“2d数组”实际上只是一个数组数组。您的第一段代码只是将array2
中对'嵌套数组的引用'复制到array1
。
那么这里的“第二部分”是什么?您是否尝试将“列”从一个阵列复制到另一个阵列?如果是这样,请记住:没有列。只有数组和数组数组,依此类推。如果所有“子阵列”发生具有相同的大小,那有点巧合。没有什么可以阻止你做的:
array1[0] = new int[100];
array1[1] = new int[5];
你可以想到“行”(每个都是一个数组)但是“10列”在上面的例子中是什么意思?
答案 2 :(得分:0)
尝试使用此类执行复制数组的工作: java.util.Arrays
答案 3 :(得分:0)
如果数组a和b的大小相同,则会将b复制到元素
中for(int i = 0; i < rows; i++)
for(int j = 0; j < columns; j++)
a[j][i] = b[j][i];
但你的问题确实没有意义。您无法复制矩阵的“第二部分”。想一想定义:
int a[5][5];
a是一个数组数组。 a [0]不是int,它是一个int数组。 a [0] [0]然而是第一个数组的第一个元素,使它成为一个int。
答案 4 :(得分:0)
除了这里已经说过的,这些都是很好的答案之外,尝试通过两个单独的for循环遍历数组,一个for循环用于第一个维度,另一个用于第二个维度。如果你想要第二行中的所有'j'值,你只能做
for(int j = 0; j < yourJDimension; j++) {
someValue = yourArray[1][j];
}
这可以帮助您显示数组的内容及其结构。此外,这里有一个可能有用的快速链接:
http://www.leepoint.net/notes-java/data/arrays/arrays-2D.html