如何使用流来计算接收输入的数组的总和?

How can a stream be used to calculate the sum of an array that receives input?

我是数组编程的新手,所以我不确定如何计算接收输入的数组的总和。通过研究,我学会了如何设置数组以及如何使用流计算数组的总和,但是当数组接收到输入时(这样它就不会以设定值开头),我不知道如何计算总和。这是我的代码:

public class TestClass {
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);

    ArrayList a = new ArrayList();
    for (int i = 0; i < 20; ++i){
        double b = sc.nextDouble();
        a.add(b);
        int[] c = a;//This step is where I get lost. I'm not sure what needs to happen to a
        Arrays.stream(c);
        System.out.println(Arrays.stream(c).sum());
    }
  }
}

谢谢

注:java.util.*、java.io.*、java.util.stream.*、java.util.数组全部导入。

您可以将 reduceDouble::sum 结合使用:

Scanner sc = new Scanner(System.in);

List<Double> arr = new ArrayList<>(); // Use generics - never use raw types!
for (int i = 0; i < 20; ++i) {
    Double b = sc.nextDouble();
    arr.add(b);
    sc.nextLine(); // <-- add this line in order to be able to feed numbers manually
}
Double res = arr.stream().reduce(Double::sum).get();
System.out.println(res);

作为alfasin, you can specialise the Stream as a DoubleStream and utilise the sum方法呈现主题的变体就可以了。

List<Double> arr = new ArrayList<>();
... enrol the numbers ...

double sum = arr.stream().mapToDouble(d -> d).sum();

Jean-François Savard, you should be aware that that your original List has been changed to List<Double> in this solution. If you want to know why, read up on Generics所述。

你先想想你的任务。您正在向扫描器询问 double 值,稍后您需要一个 int[] 数组。这不匹配。

正如其他人所说,不需要数组,如果要将值相加为 double,请将列表声明为 List<Double> 以澄清这一点。然后您可以简单地流式传输列表以将其汇总为 list.stream().reduce(Double::sum).orElse(0)list.stream().mapToDouble(Double::doubleValue).sum().

但是,如果你只对总和感兴趣,根本不需要列表:

Scanner sc = new Scanner(System.in);
double sum=0;
for (int i = 0; i < 20; ++i) {
    sum += sc.nextDouble();
    System.out.println(sum);
}

效果相同。它不使用 Stream 但使用流不会有任何好处。

如果你想通过Stream解决“总结二十个输入值”的任务,你可以考虑省略中间和。在那种情况下,有一个干净的解决方案:

Scanner sc = new Scanner(System.in);
double sum=DoubleStream.generate(sc::nextDouble).limit(20).sum();
System.out.println(sum);