满足条件的求和数组

时间:2020-05-13 11:06:57

标签: java java-stream

我想求和(运行总和)一个int数组的值,并将结果放在对应位置的新数组中。如果sum <0,则结果应为0。 我试图找到一种更好的方法来编写下面的代码?也许使用流java8?

    int[] originalArray = {3,7,-12,1,8,5};
    int[] resultArray= new int[originalArray.length];

    resultArray[0]=(originalArray[0]<0) ? 0:originalArray[0];

    for(int i=1;i<originalArray.length;i++){
        int sum=resultArray[i-1]+originalArray[i];
        resultArray[i]=(sum<0) ? 0 : sum;          
    //    System.out.println(resultArray[i]);        
    }

1 个答案:

答案 0 :(得分:4)

您不需要流,只需使用一个已经使用过的简单循环即可:

for (int i = 0, previous = 0; i < originalArray.length; i++) {
    previous = resultArray[i] = Math.max(originalArray[i] + previous, 0);
}

您看到我介绍了两件事:

  • previous:一个帮助程序变量,用于跟踪先前的结果
  • Math.max():一种有用的方法,它使我们可以选择正数的结果,或者选择负数的00大于负数)

    该方法看起来像这样,这正是您已经完成的事情:

    public static int max(int a, int b) {
        return (a >= b) ? a : b;
    }
    

如果您不喜欢多重分配行:

previous = resultArray[i] = Math.max(originalArray[i] + previous, 0);

如果更容易理解,那么您也可以这样编写:

previous = Math.max(originalArray[i] + previous, 0);
resultArray[i] = previous;