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