当我在这里浏览答案时,我读到了
" Java没有真正的二维数组;它有数组 数组,所以x [rows] [cols]是cols元素的行数组的数组x (即x [rows]是一个数组数组)。"
这对我来说似乎是个好消息,因为我想通过复制"行"来创建单个1D阵列。来自2D阵列。从我的2D数组P调用特定数组的正确语法是什么?基本上:
new double[] row1 = P[row];
或者我是否必须遍历要复制的行?我已经尝试了上面的代码和几种类似的方法。所有人都收到"缺少数组维度的错误"。
答案 0 :(得分:1)
最简单的方法是使用引用,而不是副本:
final double[] row1 = P[row];
但是,如果您需要副本,可以这样做:
final double[] row1 = Arrays.copy(P[row], P[row].length);
这当然假设P
的类型为double[][]
,row
为int
,它位于有效的索引范围内。
答案 1 :(得分:1)
如果您想要引用到一行,可以使用double[] selectedRow = P[rowToSelect]
。代码中的new
关键字放错了位置。如果您想要真实副本或更好地称为深层副本,您可以使用:
double[] selectedRow = new double[P[rowToSelect].length];
System.arraycopy(P[rowToSelect], 0, selectedRow, 0, P[rowToSelect].length);`
答案 2 :(得分:1)
在您的代码中,您正在复制引用,而不是数组:
new double[] row1 = P[row];
如果修改其中任何一个,两者都会显示结果。
要复制数组,您可以使用数组类中的静态方法 copyOf :
double[][] source = new double[rows][cols];
double[] destination = Arrays.copyOf(source[rowNumber], source[rowNumber].length);
另一种方法是使用系统类中的静态方法 arraycopy :
System.arraycopy( source[rowNumber], 0, destination, 0, source[rowNumber].length );
最后一个是通过调用 clone 方法:
double[] destination = source[rowNumber].clone();