0

这是程序任务:

编写一个名为 collapse 的方法,它接受一个整数数组作为参数,并返回一个新数组,其中包含将每对整数替换为该整数对之和的结果。

例如,如果一个名为 list 的数组存储值
{7, 2, 8, 9, 4, 13, 7, 1, 9, 10}

那么 的调用collapse(list)应该返回一个新数组,其中包含: {9, 17, 17, 8, 19}

原始列表中的第一对折叠为 9 (7 + 2),第二对折叠为 17 (8 + 9),依此类推。如果列表存储了奇数个元素,则最后一个元素不会折叠。

例如,如果列表是{1, 2, 3, 4, 5},则调用将返回{3, 7, 5}。您的方法不应更改作为参数传递的数组。

这是我目前编写的程序:

public static int[] collapse(int[] a1) {
    int newArrayLength = a1.length / 2;
    int[] collapsed = new int[newArrayLength];
    int firstTwoSums = 0;
    for (int i = 0; i < a1.length-1; i++) {
        firstTwoSums = a1[i] + a1[i+1];
        collapsed[collapsed.length-1] = firstTwoSums;
    }
    return collapsed;
}

我传入一个数组, {7, 2, 8, 9, 4, 13, 7, 1, 9, 10}我想用{9, 17, 17, 8, 19}.
注意:{9, 17, 17, 8, 19}将通过我编写的for循环获得。

目前,我无法将获得的整数添加到“折叠”数组中。如果你能帮助我或者至少给我一些关于如何做到这一点的指导,那将是一个很大的帮助。

提前致谢!

4

5 回答 5

0

使用

collapsed[collapsed.length-1] = firstTwoSums;

您的数字总和将始终放在折叠数组的同一索引中,因为 collapsed.length - 1 是一个常数值。

尝试创建一个从零开始的新变量,每次将总和添加到折叠时都可以递增。例如,

int j = 0;
for(...) {
...
collapsed[j++] = firstTwoSums;
}
于 2013-02-16T10:53:13.970 回答
0

首先,您必须了解正在发生的事情。

你有一个数组,size其中 size 可以是evenodd。这很重要,因为您a1.length/2用于设置 的大小new array,因此您还必须检查奇数和偶数值以正确设置大小,否则它将不适用于奇数大小的数组。尝试几个案例以便更好地理解。

这是一种方法。

public static int[] collapseThis(int[] array) {

    int size = 0;

    if(isEven(array.length))
        size = array.length/2;
    else
        size = array.length/2+1;

    int[] collapsedArray = new int[size];

    for(int i=0, j=0; j<=size-1; i++, j++) {

        if(j==size-1 && !isEven(array.length)) {
            collapsedArray[j] = array[2*i];
        }
        else {
            collapsedArray[j] = array[2*i]+array[2*i+1];
        }
    }
    return collapsedArray;
}

private static boolean isEven(int num) { 
    return (num % 2 == 0); 
}
于 2013-02-16T20:50:46.133 回答
0

我会将数组的情况与奇数或偶数元素组合在一起,如下所示:

public static int[] collapse(int[] a1) {
    int[] res = new int[a1.length/2 + a1.length % 2];
    for (int i = 0; i < a1.length; i++)
         res[i/2] += a1[i];
    return res;

}

于 2020-03-22T21:58:56.910 回答
0

我认为这是一个方便的答案。

public static void main(String[] args){
   int[] numbers = {1,2,3,4,5};
   int[] newList = collapse(numbers);
   System.out.println(Arrays.toString(newList));
}

public static int[] collapse(int[] data){
    int[] newList = new int[(data.length + 1)/2];
    int count = 0;
    for (int i = 0; i < (data.length / 2); i++){
       newList[i] = data[count] + data[count + 1];
        System.out.println(newList[i]);
       count = count + 2;
    }
    if (data.length % 2 == 1){   
       newList[(data.length / 2)] = data[data.length - 1];
   }
    return newList;
}
于 2016-06-04T21:50:43.120 回答
-1
public static int[] collapse(int[] a1) {
    int newArrayLength = a1.length / 2;
    int[] collapsed;
    if(a1.length%2 == 0)
    {
        collapsed = new int[newArrayLength];
    }
    else
    {
        collapsed = new int[newArrayLength+1];
        collapsed[newArrayLength] = a1[a1.length-1];
    }
    int firstTwoSums = 0;
    for (int i = 0; i < newArrayLength; i++) {
        firstTwoSums = a1[i*2] + a1[i*2+1];
        collapsed[i] = firstTwoSums;
    }       
    return collapsed;
}

我修改了你的代码,你可以先试试。

于 2013-02-16T04:05:34.993 回答