给出两个锯齿状数组:a&b其中a + b将始终具有相同的行数:
int[][] a = { {1,2}, {4,5,6} };
int[][] b = { {7}, {8,9,0} };
Run Code Online (Sandbox Code Playgroud)
我怎样才能操纵一个新的锯齿状数组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.
Run Code Online (Sandbox Code Playgroud)
正如你们所看到的那样,麻烦出现了,我正在执行一个深层复制,在for循环的第二次迭代中,它将所有行设置为迭代步骤中当前行长度的长度.
您将在循环的每次迭代中创建一个新的二维数组对象。每一次,你都在重新分配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中相应行长度的总和相匹配。ab
请记住,它c仍然不包含任何整数值,仅包含大小正确的容器来保存a和中的值b。正如您所提到的,您已经有了用值填充数组的代码。
int[][] c = new int[a.length][];
for (int i = 0; i < a.length; i++) {
c[i] = new int[a[i].length + b[i].length];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |