班级学生名单

时间:2018-09-21 15:08:40

标签: java list

我想为课程中的学生创建一个班级。唯一的要求是:每个学生应有一个名字,姓氏和平均成绩。到目前为止非常简单。

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>();之类的方法,但是对我来说效果并不理想。

有更好的方法吗?

3 个答案:

答案 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();