【问题标题】:Trouble obtaining average to an array [closed]无法获得数组的平均值[关闭]
【发布时间】:2018-05-23 05:01:19
【问题描述】:

我试图获得一个数组的平均值,我在研究过程中发现了这段代码。

int myArray[] = {1,2,3};
     Arrays.stream(myArray).average();
     System.out.println(Arrays.toString(myArray));

当我运行它时,结果显示为

[1, 2, 3]

我是 java 新手,我觉得有一些明显的东西我没有看到。

【问题讨论】:

  • 好吧,你只是在打印数组,而不是平均值。
  • 流操作通常根本不会修改创建它们的“事物”。他们返回一个结果给你,你的代码只是扔掉它。
  • @GhostCat 因此无法通过 Stream 操作找到平均值?
  • 如上所述,需要打印结果。 Arrays.stream(myArray).average().ifPresent(System.out::println);
  • @user7 太棒了。非常感谢!

标签: java arrays java-stream average


【解决方案1】:

您正在打印原始数组。

要打印计算出的数组,添加下一行:

System.out.println(Arrays.stream(myArray).average().getAsDouble());

输出:

2.0

【讨论】:

  • 虽然这适用于 OP 的输入,但如果输入流为空,则会抛出 NoSuchElementException
  • 确实,但他没有询问验证
  • 我没有抱怨您的解决方案。想让它对所有情况都足够通用
【解决方案2】:

您只是打印数组,相反,您可以这样做。

int myArray[] = {1,2,3};
System.out.println(Arrays.toString(Arrays.stream(myArray).average().getAsDouble()));

int myArray[] = { 1, 2, 3 };
OptionalDouble ans = Arrays.stream(myArray).average();
System.out.println(ans.getAsDouble());

这里,OptionalDouble 是一个容器对象,它可能包含也可能不包含 双重价值。如果存在值,isPresent() 将返回 true getAsDouble() 将返回该值。

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多