如何添加新整数以将旧整数替换为已存在的数组?

时间:2013-02-16 03:17:26

标签: java arrays

这是程序任务:

编写一个名为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循环获得。

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

提前致谢!

5 个答案:

答案 0 :(得分:0)

使用

collapsed[collapsed.length-1] = firstTwoSums;

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

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

int j = 0;
for(...) {
...
collapsed[j++] = firstTwoSums;
}

答案 1 :(得分:0)

首先,您必须了解发生了什么。

您有一个特定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); 
}

答案 2 :(得分: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;
}

答案 3 :(得分:0)

i会将具有奇数或偶数元素的数组的情况组合如下:

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;

}

答案 4 :(得分:-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;
}

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