大家下午好,
我被分配了一个编程问题,我需要采用具有不同数量元素的单个数组,并配置一个新数组。
新数组将由前两个元素的和组成,后跟接下来的两个元素的和,依此类推。
如果原始数组有奇数个元素,则最后一个值将保持不变,而求和值在前面。
public static int[] collapse(int[] old) {
int[] nNew = new int[old.length];
if(old.length%2 == 0){
nNew = new int[old.length/2];
for(int i =0; i<nNew.length; i+=2) {
int temp = old[i] + old[i+1];
nNew[i] = temp;
}
}
//i tried to for loop to increment by 1 here, but it didn't work out.
//I believe this is where my problem is.
if(old.length%2 != 0) {
nNew = new int[(old.length/2) +1];
for(int i =0; i<nNew.length-1; i++) {
//I can't get an Odd number of array elements to increment by 2
int temp = old[i] + old[i+1];
nNew[i] = temp;
nNew[nNew.length-1] = old[old.length-1];
}
}
return nNew;
}
调用示例包括:
collapse({7, 2, 8, 9, 4, 13, 7, 1, 9, 10})
expected: {9, 17, 17, 8, 19}
my result: {9, 0, 17, 0, 17}
collapse({1, 2, 3, 4, 5})
expected: {3, 7, 5}
my result: {3, 5, 5}
最佳答案
不需要单独的循环。只需在同一循环内检查即可:
public static int[] collapse(int[] old) {
int[] nNew = new int[(old.length + 1) / 2];
for (int i = 0; i < old.length; i += 2) {
nNew[i / 2] = old[i];
if (i + 1 < old.length) {
nNew[i / 2] += old[i + 1];
}
}
return nNew;
}
关于java - 使用 for 循环组合 1 个数组的元素以创建一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355609/