我正在尝试编写一个方法,该方法接受一个数组,并将相邻单元格添加在一起以生成一个新数组。用例子更容易解释:
{11, 4, 3, 18, 23, 9} --> {15, 21, 32}
{5, 5, 21, 13, 1} --> {10, 34}(第六个单元格被忽略)
public static int[] collapse(int[] a) {
int[] b = new int[a.length / 2];
for (int j = 0 ; j < (a.length - 1) ; j+2) { //goes thru original array
for (int i = 0 ; i < b.length ; i++) { //populates new array
b[i] = a[j] + a[j+1];
}
}
return b;
}
我认为这需要使用嵌套的 for 循环,第一个循环遍历原始数组,第二个循环填充新数组。我知道第一个 for 循环中的 j+2 在语法上是不正确的,但我无法找出另一种方法来实现相同的想法。
最佳答案
问题#1:for
中的第三个表达式通常需要修改索引。 j+2
本身并不能做到这一点; j = j + 2
会。 (或j += 2
。)
问题#2:您不需要嵌套的 for
循环。其作用是:首先将 j
设置为 0,然后让 i
遍历整个 b
数组。然后它递增 j
(在解决第一个问题之后)并让 i
再次遍历整个 b
数组。这不是你想要的;您希望它们并行增加。
一种方法是将 i
声明为循环外的变量:
int i = 0;
for (int j = 0; j < a.length - 1; j += 2) {
b[i++] = a[j] + a[j + 1];
}
确保循环体递增i
。或者,您可以变得更奇特:
for (int i = 0, j = 0; j < a.length - 1; i++, j += 2) {
b[i] = a[j] + a[j + 1];
}
并让 for
增加两个索引。
关于java - 将数组操作为新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850690/