我需要从数组中按顺序将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
需要解决方案。
答案 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);
}