使用循环从Java数组中查找连续总和

时间:2016-01-01 10:36:54

标签: java arrays

我需要从数组中按顺序将x元素相加,然后将结果插入到新数组中。 例如,

int x = 3;
int [ ]array = {1,2,5,8,4,9,4,2,9,7,5}; //we have 11 element here
int [ ]newarray= new int [Math.round(array.length/x)]; // the size will be round(11/3)= 4 

新阵列的大小为4

int sum = 0 ; // this will hold the sum of the array element

我需要循环到数组并将第一个**(x)**三个元素相加并在第一个newarray索引和空和变量中插入求和

然后在数组中从下一个三元素开始再循环,并将总和插入到newarray的第二个索引中,依此类推。

新数组的最后一个索引将是数组中最后两个元素的总和,因为数组中只有两个元素 我们得到一些并将其插入数组的最后一个索引,该数组应该看起来像

for (int i=0; i< newarray.length;++i){
    System.out.println(newarray[i]);

预期输出应为

newarray [ 0 ]= 1+2+5 = 8
newarray [ 1 ]= 8+4+9 = 21
newarray [ 2 ]= 8+4+9 = 15
newarray [ 3 ]= 7+5 = 12

需要解决方案。

3 个答案:

答案 0 :(得分:0)

尝试以下代码:

只需一个循环就可以降低复杂性:

    int x=3;

    int [ ]array = {1,2,5,8,4,9,4,2,9,7,5}; 
    int [ ]newarray= new int [(int) Math.ceil(array.length / (double)x)]; 
    int sum=array[0],k=0;
    for (int i=1; i< array.length;i++){
        sum=sum+array[i];
        if((i+1)%3==0){
            newarray[k]=sum;
            System.err.println(newarray[k]);
            sum=0;
            k++;
        }else if(i+1==array.length){
            newarray[k]=sum;
            System.err.println(newarray[k]);
        }
    }

<强>输出:

8
21
15
12

答案 1 :(得分:0)

这是您想要的解决方案,

int ind = 0, sum;
for (int i = 0; i < array.length; i += 3)
{
    sum = 0;
    for(int j = 0; j < 3 && i + j < array.length; j++)
    {
        sum = sum + array[i + j];
    }
    newarray[ind++] = sum;
}

现在newarray包含你想要的东西。

答案 2 :(得分:0)

首先,您需要将x转换为double,因为int/int将导致int,因此您永远不会获得持有部分和的空间。使用ceil()功能而非round()。因为round()将输入转换为最接近的整数,所以你需要closet upper integer。

int []newarray= new int [(int) Math.ceil(array.length / (double)x)];

使用两个循环并将总和放在数组中。首先,迭代求和结果数组(存储和的位置),然后迭代源数组中的元素。

当源数组没有x倍数的元素时,请确保您不会访问额外的不可用元素,否则将引发异常。

for (int i=0; i<newarray.length; i++) {
  int sum = 0;
  for(int j=0; j<x && x*i+j < array.length; j++) {
    sum += array[x*i+j];
  }
  newarray[i] = sum;
}
// print the results
for (int xx : newarray) {
  System.out.println(xx);
}