如何使用嵌套for循环增加数组?

时间:2018-04-23 13:56:51

标签: java arrays increment moving-average

必须有一种更优雅的方式来执行以下操作:

for(int i = 0; i < subsets.length-10; i++) {
    sample = (int)subsets[i];
    int y = (sample
             + ((int)(subsets[i+1])) 
             + ((int)(subsets[i+2])) 
             + ((int)(subsets[i+3])) 
             + ((int)(subsets[i+4])) 
             + ((int)(subsets[i+5]))) / 6;
}

基本上,它会逐渐为“子集”添加下5个值。如何使用嵌套的for循环来使用单个公式,这意味着我可以增加它添加下一个值的次数,然后除以那么多来获得平均值。

有点像?:

y = (sample + ((int)(subsets[i++n]))/n

其中n是递增添加下一个值的次数

任何想法?

5 个答案:

答案 0 :(得分:1)

样本不是特别的,它只是i + 0所以你不必隔离它。你可以尝试:

for(int i = 0; i < subsets.length-10; i++) {
    int y = 0;
    for(int j=i;j<i+n-1;j++) {
        y += (int)subsets[j];
    }
    y = y / n;
}

答案 1 :(得分:1)

此流应该为您提供所有y值:

IntStream.range(0, subsets.length - 10)
         .map(i -> Arrays.stream(subsets, 0, 6).sum() / 6);

你也可以使用IntStream.average()而不是自己计算,如果双人没问题。

答案 2 :(得分:1)

y = Arrays.stream(subsets, i, i+6).sum()/6;

答案 3 :(得分:0)

您的嵌套循环方法是正确的。尝试这样的事情:

for ( int i = 0; i < subsets.length - 10; i++ )
{
   sample = subsets[ i ];
   int y = sample;
   for ( int k = i; k < i + 5; k++ )
   {
      y += subsets[ k ];
   }
   y /= 6;
}

答案 4 :(得分:0)

int sample;
        for (int i = 0; i < subsets.length - 10; i++) {
            sample = (int) subsets[i];
            for (int j = i; (j < i + 6) && (j < subsets.length -10); j++) {
                sample += subsets[i];
            }
            int y = sample / 6;
        }