【问题标题】:How To Use Class Method To Calculate Average Of All Values In An Array如何使用类方法计算数组中所有值的平均值
【发布时间】:2017-08-04 13:25:46
【问题描述】:

我正在尝试创建一个打印出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();
}

}

【问题讨论】:

    标签: java arrays methods


    【解决方案1】:

    您不能将运算符与数组一起使用,因此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");
    

    【讨论】:

    • 我在 Youtube 上观看了一些关于如何对数组中的所有值求和的视频,但是如何在不将“int sum”添加到括号中的情况下将总和传递给“int average()”方法?
    • 是的,我刚刚有一个荷马时刻(d'oh)。这在我的 Java 书前面已经解释过了,但我完全忘记了。谢谢。
    【解决方案2】:

    使用 Java 8:

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

    您可以使用 (int) 转换为 int(向下舍入)

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

    【讨论】:

    • AFAIK 转换不会四舍五入,它只是截断小数分隔符后的每个数字 - 恰好在数字上等于向下舍入......但这两种方法是不同的算法,尤其是浮点数……就像说水和咖啡是相同的流体,只是因为它们都包含/由 H2O 制成并且具有非常相似的特性
    【解决方案3】:
    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);
    

    【讨论】:

    【解决方案4】:

    由于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] 平均值为2.5,但使用@ 987654328@你会得到2。

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2022-01-15
      • 2013-10-25
      相关资源
      最近更新 更多