计算数组列表的平均值?

2022-08-31 14:37:33

我正在尝试使用以下代码来计算用户输入的一组值的平均值,并将其显示在 a 中,但它无法正常工作。假设用户输入 7、4 和 5,程序显示 1 作为平均值,而它应该显示 5.3jTextArea

  ArrayList <Integer> marks = new ArrayList();
  Collections.addAll(marks, (Integer.parseInt(markInput.getText())));

  private void analyzeButtonActionPerformed(java.awt.event.ActionEvent evt) {
      analyzeTextArea.setText("Class average:" + calculateAverage(marks));
  }

  private int calculateAverage(List <Integer> marks) {
      int sum = 0;
      for (int i=0; i< marks.size(); i++) {
            sum += i;
      }
      return sum / marks.size();
  }

代码有什么问题?


答案 1

使用Java 8,它更容易一些

OptionalDouble average = marks
            .stream()
            .mapToDouble(a -> a)
            .average();

因此,您的平均值是平均值。getAsDouble()

return average.isPresent() ? average.getAsDouble() : 0; 

答案 2

为什么在具有增强的 for 循环时使用带有索引的笨拙 for 循环?

private double calculateAverage(List <Integer> marks) {
  Integer sum = 0;
  if(!marks.isEmpty()) {
    for (Integer mark : marks) {
        sum += mark;
    }
    return sum.doubleValue() / marks.size();
  }
  return sum;
}

更新:正如其他几个人已经指出的那样,使用带有Java 8及更高版本的Streams,这变得更加简单:

private double calculateAverage(List <Integer> marks) {
    return marks.stream()
                .mapToDouble(d -> d)
                .average()
                .orElse(0.0)
}