【问题标题】:Averaging Items in an Array, in an Array对数组中的项进行平均,在数组中
【发布时间】:2017-04-23 23:39:45
【问题描述】:

我想遍历我的数组列表名册,对于每个学生项目,我想返回一组成绩的平均值。我知道有 3 个成绩,所以这段代码有效,但是如果我事先不知道学生成绩数组中有多少成绩,我该如何实现呢?

    public static void printAverageGrades(){
    System.out.println("Print Average Grades");
    for(Student item : roster)
    {
        double div = roster.size();
        **double average = (item.getGrades()[0] + item.getGrades()[1] + item.getGrades()[2]) / div;**
        System.out.printf("%.2f \n", average);
    }
}

【问题讨论】:

  • 所以你是说getGrades 返回一个int[]
  • 答案将涉及for 循环,可能还有.length,它会为您提供数组的长度。我建议您查找在线教程并了解这些内容。
  • 它正确返回双精度,但我必须手动输入每个位置,例如item.getGrades()[0] + item.getGrades()[1]...我想根据数组的长度循环遍历 Grades 数组以返回每个单独的 double 以便我可以平均它们?
  • for (int grade : item.getGrades() {...} 将允许您在不知道成绩数量的情况下对成绩求和

标签: java arrays average


【解决方案1】:

您可以通过两种方式做到这一点。首先列出了更优选的 Java 8 方式。

  • 使用Arrays.stream 将数组封装为流,然后只需调用几个方法即可获得平均值。

    double avg = Arrays.stream(item.getGrades()).average().getAsDouble();
    
  • 使用另一个for 循环并保持元素的运行总数。不要忘记手动将您的分子强制转换为 double,否则您将遇到整数除法。

    int sum = 0;
    for(int i : item.getGrades()) {
        sum += i;
    }
    double avg = (sum * 1.0) / item.getGrades().length;
    

在实践中,永远不要对索引位置进行硬编码。您可以始终获取数组的长度using .length。 p>

【讨论】:

  • 谢谢!我知道我不想对它们进行硬编码,这个解决方案非常有效。
【解决方案2】:

你可以只使用这个函数,它会遍历数组,通过动态迭代for循环,我们计算总和。 然后将平均值除以数组的长度。

double getAverage(double[] data)
{
    double sum = 0.0;
    for(double a : data)
        sum += a;
    return sum/data.length;
}

【讨论】:

  • 如果您要编写纯代码解决方案,最好解释代码的作用,以便 OP 对解决方案的含义有所了解。
  • @Makoto 这很不言自明。
  • 我不反对,但这并不意味着只留下代码就可以了。这是给他们一条鱼和教他们钓鱼的区别。
  • 是的。更新了我的答案。
猜你喜欢
  • 2017-03-01
  • 2017-06-11
  • 2011-07-09
  • 2021-11-06
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多