如何访问2d数组的第二部分

时间:2011-03-31 14:53:36

标签: java multidimensional-array

好的我试着循环一个二维数组从一个数据复制到另一个。我可以使用:

分配第一部分的整数
array1[i] = array2[i];

但我不能对其他部分做同样的事情,例如:

array1[][j] = array2[][j];  //this doesn't compile

OR

array1[0]j = array2[0][j];  //creates run time error

我怎样才能明确复制第二部分而不是第一部分?

5 个答案:

答案 0 :(得分:5)

没有二维数组的“第一部分”和“第二部分”。在声明为i的数组中有j行和x[j][i]列。

现在技术方面:

Java没有真正的二维数组;它有数组数组,因此x[rows][cols]x rowscols元素数组的数组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