gpt4 book ai didi

java - 将锯齿状二维数组中的元素组合成一个新的锯齿状二维数组(深度复制问题)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:49 25 4
gpt4 key购买 nike

给定两个锯齿状数组:a 和 b,其中 a + b 将始终具有相同的行数:

int[][] a = { {1,2}, {4,5,6} };
int[][] b = { {7}, {8,9,0} };

我究竟该如何操作一个新的锯齿状数组 c 以返回:{ {1,2,7}, {4,5,6,8,9,0} }?

这是我目前所拥有的:

int[][] c = null;    
for(int i = 0; i<a.length; i++){
c = new int[a.length][a[i].length + b[i].length];
}

//rest of my code for assigning the values into the appropriate position works.

问题出现了,如你们所见,我正在执行深度复制,在 for 循环的第二次迭代中,将 ALL 行的长度设置为长度迭代步骤中的当前行。

最佳答案

你的方法有缺陷

您在循环的每次迭代中创建一个新的二维数组对象。每次通过,您都在重新分配 c,从而丢弃您之前的所有工作。此外,同时在两组括号中放置一个数字会导致每行具有相同的长度

使用您的示例,第一次通过循环时,c 被分配给具有两行的二维数组,每行长度为三。第二次通过循环时,您丢弃了之前的二维数组并创建了一个包含两行的新数组,每行长度为 6。

但您需要做的是每次通过循环创建一个新行,而不是整个二维数组。

解决方案

首先,我们创建一个名为 c 的二维数组,并指定它有 a.length 行。我们不在第二个括号中放置一个值,因为这表明所有行的长度都相同。所以在这一点上,c 不知道行的长度。它只知道它可以有多少行。请记住:c 实际上没有任何行,只是 a.length 行的容量。

接下来,我们必须创建行并为其分配长度/容量。我们将循环设置为运行多少行就运行多少次。当前行索引由 i 表示,因此,c[i] 指的是二维 c 数组中的特定行。我们使用 new int[] 来创建每个单独的行/数组,但在方括号内,我们必须指定当前行的长度。对于任何行 c[i],其长度由 a[i]b[i] 的长度之和给出;即,a[i].length + b[i].length

我们剩下的是一个包含行/数组的数组 c,每个行/数组的长度/容量与 a 中相应行长度的总和相匹配和 b

请记住,c 仍然不包含任何整数值,仅包含大小正确的容器以容纳 ab。正如您所提到的,您已经拥有用值填充数组的代码。

int[][] c = new int[a.length][];     

for (int i = 0; i < a.length; i++) {
c[i] = new int[a[i].length + b[i].length];
}

关于java - 将锯齿状二维数组中的元素组合成一个新的锯齿状二维数组(深度复制问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30656811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com