如何使用类方法计算数组中所有值的平均值

时间:2017-08-04 13:25:47

标签: java arrays methods

我正在尝试创建一个打印出Student详细信息的类,并希望了解如何获取int array并计算所有商标的平均值。

这是我到目前为止所拥有的:

public class Student {
    private int id;
    private String name;
    private String course;
    private int[] marks;

    Student (int id, String name, String course, int [] marks) {
    // constructor which creates a student according to the specified parameters
       this.id = id;
       this.name = name;
       this.course = course;
       this.marks = marks;
    }

    int average () {
    //  calculates and returns the average mark for the student
        return marks / 5; // error: the operator / is undefined for the argument type int[]
    }

    void print () {
    // prints student details
        System.out.println("Student ID: "+id+"\n");
        System.out.println("Student Name: "+name+"\n");
        System.out.println("Course enrolled on: "+course+"\n");
        System.out.println("Student mark: "+marks+"\n"); // This prints a hashcode for some reason
}

}

我的问题,具体来说,我如何在“int average()”方法中返回int[]标记的平均值(不更改括号中的标题或参数)?

public class T3Main {
public static void main(String[] args) {
    Student s1 = new Student(1234, "Joe Bloggs", "Computer Studies", new int[] {67, 55, 78, 72, 50});
    Student s2 = new Student(2341, "Sue White", "Computer Science", new int[] {57, 85, 58, 49, 61});
    Student s3 = new Student(3412, "Ben Black", "Software Engineering", new int[] {71, 45, 66, 70, 51});
    s1.print();
    s2.print();
    s3.print();
}

}

4 个答案:

答案 0 :(得分:3)

您不能将运算符与数组一起使用,因此marks / 5不正确。您需要对所有数组项进行求和并将其存储在单独的变量中,然后将其除以5(数组的长度)。您可能需要注意空数组或空数组。

double sum = 0d;
for(int item : marks) {
    sum += item;
}
return sum / marks.length;

此外,下面的语句打印数组的字符串表示,而不是它的内容。

System.out.println("Student mark: "+marks+"\n");

您可以使用以下方式打印数组,

System.out.println("Student mark: "+ Arrays.toString(marks) +"\n");

答案 1 :(得分:2)

使用Java 8:

Arrays.stream(marks).average().getAsDouble();

您可以使用(int)

转换为int(向下舍入)
(int)Arrays.stream(marks).average().getAsDouble();

答案 2 :(得分:1)

import java.util.stream.*;

它在java.util.stream包中

示例:

int[] marks = {10,20,30,40,50};
int sum = IntStream.of(marks).sum();
System.out.println("The sum is " + sum);

答案 3 :(得分:1)

由于int[]是一个对象并且包含带有标记的数组,因此未为此类型定义/运算符。您必须将标记的总和除以它们的数字才能找出平均值:

double average () {
    double markSum = 0;
    double average;
    int i;
    for (i = 0; i < marks.length; i++) {
        markSum = markSum + marks[i];
    }
    average = markSum / marks.length;
    return average;
}

此外,请注意,此处使用的正确数据类型通常为double,因为int可能会导致错误(舍入)结果:如果marks = [1, 2, 3, 4]平均值为{{} 1}},但是使用2.5,您将获得int average()