从对象数量中获得平均值

时间:2015-09-15 20:48:48

标签: java object arraylist

我试图从对象中获得平均分数,但却无法想到这样做的好方法。

我有10个对象,它们都有自己的分数。

我创建了setter和getter类来获得平均值,但我遇到的问题是我会创建这样的东西,这样即使我把对象的分数放到这个方法中,持有者也会去回到0。

public double getAverage() {
    return average;
}

public void setAverage(double studentScore) {
    double holder = 0;

    average = holder + studentScore;
    holder = average;

    this.average = studentScore;
}

我还在考虑为每一个分数创建setter和getter方法,但这会占用大量空间,我认为必须有更好的方法来实现它。

以下是我在主要方法

中使用的代码片段
public static void main(String[] args) {
  final String STUDENT_INFO = "HW1_Students.txt";

  List<GradeInfo> list = new ArrayList<GradeInfo>();

  Scanner inputFile = null;
  GradeInfo person1 = new GradeInfo();
  GradeInfo person2 = new GradeInfo();
  GradeInfo person3 = new GradeInfo();
  GradeInfo person4 = new GradeInfo();
  GradeInfo person5 = new GradeInfo();
  GradeInfo person6 = new GradeInfo();
  GradeInfo person7 = new GradeInfo();
  GradeInfo person8 = new GradeInfo();
  GradeInfo person9 = new GradeInfo();
  GradeInfo person10 = new GradeInfo();

  list.add(person1);
  list.add(person2);
  list.add(person3);
  list.add(person4);
  list.add(person5);
  list.add(person6);
  list.add(person7);
  list.add(person8);
  list.add(person9);
  list.add(person10);


  try {
   inputFile = new Scanner(new File(STUDENT_INFO));
  }

  catch (FileNotFoundException ex) {
   System.out.println("\n *** Exception occured while opening "
     + ex.getMessage() + " ***");
   System.exit(-1);
  }

  readData(inputFile, STUDENT_INFO, person1, person2, person3, person4,
    person5, person6, person7, person8, person9, person10);

      for (int i = 0; i < list.size(); i++) {
          System.out.println(list.get(i));
      }
}

非常感谢任何建议,谢谢。

3 个答案:

答案 0 :(得分:1)

public void setAverage(ArrayList<GradeInfo> grades) {
double average = 0;
for(int i = 0; i < grades.size(); i++){
    average += grades.get(i);
}
average = average / grades.size();
this.average = average;
}

我希望这就是你的意思......这个方法将采用你的Arraylist,并在你的有线“setter and getter class”中设置正确的平均分数。

答案 1 :(得分:1)

我真的不明白你在这里要做什么:

 public void setAverage(double studentScore) {
        double holder = 0;

        average = holder + studentScore;
        holder = average;

        this.average = studentScore;
    }

但它的逻辑是holder将被重置为0因为你初始化它并在你的函数的beginnig中将它设置为0,或者我误解了这个? 只需在您的设置者之外创建holder

如果您只想获得一堆值的平均值,只需将所有值加在一起,然后将结果除以值的数量/数量。

例如:

public double getAverage(List <GradeInfo> l){
       int totalAmount;

       for(i = 0; i < l.size(); i++){
           totalAmount += l.get(i);
       }

       double average = totalAmount / l.size();
       return average;
}

答案 2 :(得分:0)

这可能不适用于您的计划,因为您的计算中可能至少有一个正值。但是,如果他正在测试所有可能的案例,我可以看到一位教授为它取得分数。

如果您遵循Sand的建议,请确保在使用平均值计算中的大小之前检查arraylist的大小是否大于零。你不能在Java中除以零。相反,这样做:

public double getAverage(List <GradeInfo> l){
       int totalAmount;

       for(i = 0; i < l.size(); i++){
       totalAmount += l.get(i);
       }
       if (l.size() > 0) {
       double average = totalAmount / l.size();
       return average;
       else {
            double average = 0;
            }
            return average;
}