如何在Java中的ArrayList中找到平均成绩和最高成绩?

时间:2013-03-11 19:05:44

标签: java arraylist average

在这段代码中,我想找出学生得到的最高分,以及所有分数的平均分。标记通过用户输入放入ArrayList。我有一半完成了双倍但不知道如何完成它,我想知道如何找到最高分。

感谢。

import java.util.*;
import java.lang.*;
class Course
{
    private ArrayList<Student> people = new ArrayList<Student>();

    public void add( Student s )
    {
        people.add( s );
    }
    //Return the number of students who passed (mark>= 40)
    public int pass()
    {
        int count = 0;
        for ( int i=0; i < people.size(); i++ )

        {
            int mark = people.get(i).getMark();
            if(mark < 40){
                count = count +1;
            }
        }

        return count;
    }

    public int fail()
    {
        int count = 0;
        for ( int i=0; i < people.size(); i++ )

        {
            int mark = people.get(i).getMark();
            if(mark < 40){
                count = count +1;
            }
        }

        return count;
    }

   public String top()
   {

   }

    public double average()
    {
        int sum=0;

        for (int i=0; i < people.size(); i++ )
        {
            double average = sum / (double) i;
        }

        return sum;
    }

}

5 个答案:

答案 0 :(得分:1)

使用Collections.max(people, yourComparator) yourComparator使用getMark作为比较字段:您可以这样做:

Student maxStudent = Collections.max(people, new Comparator<Student>() {
    @Override
    public int compare(Student first, Student second) {
        if (first.getMark() > second.getMark())
            return 1;
        else if (first.getMark() < second.getMark())
            return -1;
        return 0;
    }
});

答案 1 :(得分:0)

要获得顶部标记,您需要创建一个变量,每次找到更高的标记时都会替换该变量。如果您已经循环,则可以通过将循环中的所有标记相加并将其除以总人数来找到平均值。在这里,我在同一个循环中完成了两个任务:

int totalMark = 0;
int topMark = 0;
for (int i=0; i< people.size(); i++) {
    int mark = people.get(i).getMark(); 
    if (mark > topMark) {
        topMark = mark;
    }
    totalMark += mark;
}
int averageMark = totalMark / people.size();

答案 2 :(得分:0)

您可以通过在add(Student)方法中收集统计信息来完成此操作:

public class Course {
    private ArrayList<Student> people = new ArrayList<Student>();
    private int passing = 0;
    private int failing = 0;
    private int top = Integer.MIN_VALUE;
    private int sum = 0;

    public void add( Student s ) {
        people.add( s );
        if(s.getMark() >= 40){
            passing++;
        }
        else {
            failing++;
        }
        sum += s.getMark();
        if(s.getMark() > top) {
            top = s.getMark();
        }
    }

    public int pass() {
        return passing;
    }

    public int fail() {
        return failing;
    }

    public int top() {
        return top;
    }

    public double average() {
        return sum / people.size();
    }
}

要直接回答您的问题,我会将每个标记与最大找到的标记进行比较。通过将总和除以标记数来找到平均值。

答案 3 :(得分:0)

您可以在Comparable班级中实施Student界面(http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html),然后使用Collectionshttp://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html)班级来使用{{1} }和max用于获取最大和最小等级值。要获得平均成绩值,您只需要迭代min得到成绩值的总和,最后将总和除以ArrayList

答案 4 :(得分:0)

检查一下。它可能对你有帮助。

Java program to find average of all numbers except top three