我是Java新手,我正在编写一个程序,用于管理学生、他们的科目和该科目的成绩。
代码询问学生的详细信息,然后将所有信息保存到Arraylist中。我试图得到一门科目的平均成绩,但没有成功,我已经计算了某个学生的平均成绩,但获得某一科目的所有成绩,然后计算平均成绩,这超出了我的理解。
这是我用来创建数组列表的代码:
public class options {
public String name;
public ArrayList<students> studentlist = new ArrayList<students>(10);  
    public String createstudent(String name, String subject, Float rade1, Float grade2, Float grade3) {
        studentlist.add(new students(name, subject, grade1, grade2, grade3);
        return "The student has been added to the database. ";
    }
}这是学生类的代码:
public class students{
    
    public String name;
    public String subject;
    public Float grade1;  
    public Float grade2;  
    public Float grade3;
    
   public students(String name, String subject, Float grade1, Float grade2, Float grade3) {
        
        this.name= name;
        this.subject= subject;
        this.grade1= grade1;
        this.grade2= grade2;
        this.grade3= grade3;
    }
}   我试过像这样的东西
public double getAverageValue(){
  double averageValue = 0;
  double sum = 0;
  if(studentlist.size() > 0){
    for ( int i=0; i < studentlist.size() ; i++) {
      sum += studentlist.get(i).getname().getgrade1().getgrade2().getgrade3();
    }
    averageValue = (sum / (double)studentlist.size())
  }
  return averageValue;
}但我不知道如何只选择某一科目的成绩,而不是所有学生的所有成绩,所以我有点卡住了。
编辑:
基于这里的答案和我已经完成的一些工作,这是最终的代码:
public String showAverageGrade(String clase){
        int countstudents =0;
        double studentaverage =0;
        for(int i=0 ; i < studentlist.size();i++){
            if(studentlist.get(i).asksubject().equals(subject)){
                studentaverage +=studentlist.get(i).studentaverage ();
                countstudents++;
            }
        }
        return "The average grade of " + subject + " is " + (studentaverage / countstudents) + ".";
    }  英语不是我的第一语言,所以任何错误都是因为我翻译了它。
感谢大家的反馈。
发布于 2021-03-13 03:58:01
构建它的正确方法是,首先,您需要将Student抽象为一个类。简单的方法是在主类中创建一个数组属性students,在Student类中它将有一个名为subjects的属性Map来放置一个键(主题名称)和值(成绩)。
如果我理解正确,你需要将一些学生放在主数组中,他们的成绩,然后计算每个科目所有这些学生的平均值,要计算这一点,你需要创建另一个Map,并通过键(主题)和所有出现的事件进行交互,然后按计数拆分。
以一种简单的方式,你已经知道所有的主题类型,如果你不知道,它将更加复杂,在calculate之前,你需要另一个没有重复类型的列表来过滤和交互,也许这里解释了一种创建没有重复类型的新列表的方法:https://www.baeldung.com/java-remove-duplicates-from-list。
https://stackoverflow.com/questions/66605982
复制相似问题