数组元素的总和是指数组中所有元素(或数字)的总和。数组元素可以是整数(int
)或十进制数字(float
或double
)。
方法1:使用for循环
这是一种传统且最常用的方法,其中使用for
循环来迭代数组。
在每次迭代中,将当前数组元素添加到一个保存数组元素总和的变量中。
在循环开始之前,此变量被初始化为0。例如,
public class ArraySumCalculator {
public static void main(String[] args) {
int[] array = { 1, 34, 67, 23, -2, 18 };
// variable to hold sum of array elements
int sum = 0;
// iterate using a for loop
for (int loopCounter = 0; loopCounter < array.length; loopCounter++) {
// get current array element
int element = array[loopCounter];
// add element to sum
sum += element;
}
System.out.println("Sum of array elements is: " + sum);
}
}
sum += element
是的简写 sum = sum + element
上面的程序打印
数组元素的总和是:141
for
该程序中的for-each
循环也可以用如下所示的循环代替。
for (int element : array) {
sum += element;
}
方法2:在Java 8使用Arrays.stream
此方法使用流概念在Java 8.呼叫引入stream
上方法java.util.Arrays
类供给它的阵列作为参数。此方法返回数组元素流。在此流上
调用sum
方法将提供数组中元素的总和。例如,
import java.util.Arrays;
import java.util.stream.IntStream;
public class ArraySumCalculator3 {
public static void main(String[] args) {
int[] array = { 1, 34, 67, 23, -2, 18 };
// get stream of elements
IntStream stream = Arrays.stream(array);
// add the elements in stream
int sum = stream.sum();
System.out.println("Sum of array elements is: " + sum);
}
}
请注意,调用stream
方法返回a java.util.stream.IntStream
,它是整数值的流。这是因为提供给stream方法的数组是整数数组。
如果数组的类型为double,则流将为java.util.stream.DoubleStream
上面的代码,也可以将其简化为以下一行。
int sum = Arrays.stream(array).sum();
该程序的输出与上一个相同。
方法3:在Java 8中使用IntStream
Java 8引入了Java 8java.util.stream.IntStream
,这是一个元素序列。它有一个of
以数组为参数的方法,并返回数组元素的流。返回的流上的
调用sum
方法提供数组元素的总和。例如,
import java.util.stream.IntStream;
public class ArraySumCalculator5 {
public static void main(String[] args) {
int[] array = { 1, 34, 67, 23, -2, 18 };
// get stream of elements
IntStream stream = IntStream.of(array);
// add the elements in stream
int sum = stream.sum();
System.out.println("Sum of array elements is: " + sum);
}
}
上面的代码可以简化为如下所示的单行代码。
int sum = IntStream.of(array).sum();
方法4:对流使用归约运算
此方法还使用流来查找数组元素的总和。一旦获得流,就可以对其应用缩减。
从javadocs,
甲 减少 操作通过组合操作的反复应用,例如找到一组数字的总和或最大值,或累积的元素到一个列表中需要输入元件和将它们组合的一个序列到单个汇总结果。
java.util.stream.IntStream
有一个带有reduce
2个参数的方法。首先是所需操作的标识元素。对于加法运算,标识为0。
第二个参数是类型的参数,java.util.function.InitBinaryOperator
它是一个函数接口,该函数接口具有applyAsInt
将运算应用于所提供的操作数的方法。
可以使用Lambda表达式提供对此方法的实现。例子,
import java.util.stream.IntStream;
public class ArraySumCalculator7 {
public static void main(String[] args) {
int[] array = { 1, 34, 67, 23, -2, 18 };
// get stream of elements
IntStream stream = IntStream.of(array);
// add the elements in stream using reduction
int sum = stream.reduce(0, (element1, element2) -> element1 + element2);
System.out.println("Sum of array elements is: " + sum);
}
}
注意reduce
方法的参数。
第一个是0,这是要添加的标识。
第二个是lambda表达式,它表示“对提供的元素应用加法运算”。
此方法将遍历所有数组元素并执行这些元素的添加。
以上方法可以简化为单线。
int sum = IntStream.of(array).reduce(0, (element1, element2) -> element1 + element2);