我想为课程中的学生创建一个班级。唯一的要求是:每个学生应有一个名字,姓氏和平均成绩。到目前为止非常简单。
public class ClassStudents{
String firstName, lastName;
double p1, p2, p3;
public ClassStudents(String fn, String ln){
this.firstName = fn;
this.lastName = ln;
}
public double average(){
return (p1 + p2 + p3) / 3;
}
}
我还要计算整个班级的平均值。我当时正在考虑创建每个学生的列表,然后将他们的平均值除以列表的长度。我已经尝试过类似List<ClassStudents> students = new ArrayList<ClassStudents>();
之类的方法,但是对我来说效果并不理想。
有更好的方法吗?
答案 0 :(得分:2)
代码中的几个问题:
变量的名称p1, p2, and p3
很糟糕,因为我不知道它们代表什么,所以您宁愿选择一些更好的名称。 dobule的类型也有点怪(不知道您的学校系统,但是例如在德国,您只有1,2,3,4,5,6或0-15的分数更适合Integer
)
类名ClassStudents
也不适合它。这是一个学生的课程,因此我将其命名为Student
。在Java中,您通常不在类之前编写类,因为这或多或少是隐式的。
该列表实际上对平均值有效:
public static void main(String[] args)
{
Student mario = new Student("Mario", "290");
mario.p1 = 3;
mario.p2 = 2;
mario.p3 = 1;
Student maria = new Student("Maria", "291");
maria.p1 = 3;
maria.p2 = 2;
maria.p3 = 6;
List<Student> studentList = new ArrayList<>();
studentList.add(mario);
studentList.add(maria);
double sum = 0;
for (Student student : studentList) {
sum += student.average();
}
sum /= studentList.size();
System.out.println("The average grade for the students is " + sum);
}
由于在构造Student对象时您可能会知道成绩,因此我也将其添加到构造函数中。
答案 1 :(得分:0)
您可以创建一个静态变量计数器。然后在构造函数中添加1。
private static int count = 0;
public ClassStudents(String fn, String ln){
this.firstName = fn;
this.lastName = ln;
count++
}
请记住,如果您删除学生,则从count变量中减去一个。
答案 2 :(得分:0)
迭代您的学生列表,取每个学生的avarage()
除以学生人数。
List<ClassStudents> students = new ArrayList<ClassStudents>();
double totalAvarage = 0;
for(ClassStudents std: students){
totalAvarage += std.avarage();
}
totalAvarage /= students.size();