我想求和(运行总和)一个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]);
}
答案 0 :(得分:4)
您不需要流,只需使用一个已经使用过的简单循环即可:
for (int i = 0, previous = 0; i < originalArray.length; i++) {
previous = resultArray[i] = Math.max(originalArray[i] + previous, 0);
}
您看到我介绍了两件事:
previous
:一个帮助程序变量,用于跟踪先前的结果 Math.max()
:一种有用的方法,它使我们可以选择正数的结果,或者选择负数的0
(0
大于负数)
该方法看起来像这样,这正是您已经完成的事情:
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;