实习代码
Public class StudentGrade{
 Public String name;
 Public String lesson;
 Public float grade;
}
现在有一个2000个studentGrade的对象放在一个ArrayList中,为arrayList,现在我们要把每个学生的总成绩,和平均成绩求出来,并且按平均成绩排序输出,
比如:
Name  Totalgrade  avgGrade
John    400        80
Tom     360        75
请给出实现
没有做出来,不知道怎么实现?:(,大概想了想,就是找出每个人选了多少课,但是不知道怎么在ArrayList中做

解决方案 »

  1.   

    1,弄个类来存储Name  Totalgrade  avgGrade,设为类A2,然后弄个关于1步的List<A>3, 遍历arrayList,取出学生名字,如果list中已经有该学生,数值相加,否则添加新类A--------------以上学生统计做好了,下面进行排序
    1 前戏
    两种方法,一种A实现Compilable,要么用到Comparator2 重点戏
    Collections.sort()
      

  2.   

    用HashMap的什么都行
    其实就两个重点的地方一,根据名字统计学生总成绩,平均成绩
    二,排序
      

  3.   

    用循环搞定总成绩和平均成绩,
    然后用Collections.sort()方法搞定排序……
      

  4.   

    也可以直接对StudentGrade进行排序然后统计再排序
      

  5.   

    Where will u store Students' scores, if u are goint to use class StudentGrade?
      

  6.   

    Where will u store Students' scores, if u are goint to use class StudentGrade?
      

  7.   

    How about a array or HashMap?
      

  8.   

    这个是JAVA集合里的java.util.Collections.sort(list)应该可以帮到你
      

  9.   

    我当时也是这样想的,但不知道怎么在里面实现,比如,tom,选择了5门课,假如2000个studentgrade对象为s1-s2000
    tom肯定占了5个对象,假如为s10-s14,怎么求他的总成绩
      

  10.   

    准备工作
    A{
    name, total, number
    }List<A> list=============================
    for(StudentGrade s : arrayList){
    boolean contain;
    for(A a : list){
    if(a.name == s.name){
    // 分数相加, number++
    contian = true;
    }
    }
    if(!contain){
    list.add(new A(name, score, 1))
    }
    }
      

  11.   

    以下是我的笨方法,应该还有更好的算法吧?欢迎指教public static void main(String[] args) {
        List students = new ArrayList();
        students.add(new StudentGrade("John", "PE", 90));
        students.add(new StudentGrade("Mary", "Math", 90));
        students.add(new StudentGrade("John", "English", 70));
        students.add(new StudentGrade("Mary", "Music", 90));
        students.add(new StudentGrade("Iris", "Article", 60));
        students.add(new StudentGrade("Mary", "English", 70));
        students.add(new StudentGrade("Iris", "PE", 90));
        students.add(new StudentGrade("John", "Math", 80));    //先排序
         Collections.sort(students, new Comparator() {
            public int compare(Object obj1, Object obj2) {
            StudentGrade studentGrade1 = (StudentGrade) obj1;
            StudentGrade studentGrade2 = (StudentGrade) obj2;
            return studentGrade1.getName().compareTo(studentGrade2.getName());
            }
        });    System.out.println("Name\tTotalGrade\tavgGrade");
        float totalGrade = 0;
        int lessonCount = 0;
        String lastName = "";
        String name = "";
        for (int i = 0; i < students.size(); i++) {
            StudentGrade studentGrade = (StudentGrade) students.get(i);
            name = studentGrade.getName();
            // 比较姓名是否发生变化,若没变化,则继续累加总成绩和科目数
             if (name.equals(lastName) || i == 0) {
                totalGrade += studentGrade.getGrade();
                lessonCount++;
            }
            // 若姓名发生变化,则打印上一人的成绩,并重新开始累加总成绩和科目数
             else {
                System.out.println(lastName + "\t" + totalGrade + "\t" + totalGrade / lessonCount);
                totalGrade = studentGrade.getGrade();
                lessonCount = 1;
            }
            lastName = name;
        }
        System.out.println(lastName + "\t" + totalGrade + "\t" + totalGrade / lessonCount);
    }
    结果是:
    Name TotalGrade avgGrade
    Iris 150.0 75.0
    John 240.0 80.0
    Mary 250.0 83.333336
      

  12.   

    可不可以写数据库啊?
    用SQL的话求和、排序是不是更方便点啊
      

  13.   


    class StudentGrade {
    public String name; public String lesson; public float grade; public StudentGrade(String name, String lesson, float grade) {
    this.name = name;
    this.lesson = lesson;
    this.grade = grade;
    }
    }public class Count{
    public Map countGrade(ArrayList sc){
    String name="";
    ArrayList<Float> smap = new ArrayList<Float>();
    Map<String,List> pmap = new HashMap<String,List>();


    for(Iterator isc = sc.iterator();isc.hasNext(); ){
    StudentGrade s = (StudentGrade)isc.next();
    name = s.name;

    float perSum=0;
    int sum =0;
    float avg =0;
    smap.clear();
    for(Iterator it = sc.iterator();it.hasNext(); ){
    StudentGrade sn = (StudentGrade)it.next();
    if(name.equals(sn.name)){
    sum +=1;
    perSum += sn.grade;
    avg = perSum / sum;
    }
    }
    smap.add(perSum);
    smap.add(avg);

    ArrayList<Float> a = new ArrayList<Float>();
    for(Float f :smap){
    a.add(f);
    }
    pmap.put(name,a);

    }
    return pmap;

    }
    public static void main(String[] args){
    StudentGrade[] arr = {new StudentGrade("yr","A",80),new StudentGrade("yr","A",69),new StudentGrade("yr","e",85),new StudentGrade("yr1","A1",90),new StudentGrade("yr1","A1",98),new StudentGrade("yr5","A1",98)};
    ArrayList arrl = new ArrayList();
    Collections.addAll(arrl, arr);

    Map s = new Count().countGrade(arrl);
    System.out.println(s);
    }
    原版,还没来得及优化,没时间了。。应该对 的
      

  14.   


    2000*2000+的,效率~~~~~,
    计算完A的分数和平均分,将ArrayList里边的信息remove();
      

  15.   

    恕我直言  这个问题  是excel做 就很简单
      

  16.   

    package com.test.app;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.List;public class Count
    {
        public String name;
        public float totalGrade = 0f;
        public float avgGrade = 0f;
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            StudentGrade[] arr = {
                            new StudentGrade("yr", "A", 80),
                            new StudentGrade("yr", "A", 69),
                            new StudentGrade("yr", "e", 85),
                            new StudentGrade("yr1", "A1", 90),
                            new StudentGrade("yr1", "A1", 98),
                            new StudentGrade("yr5", "A1", 70)
            };
            ArrayList arrl = new ArrayList();
            Collections.addAll(arrl, arr);// 将所有指定元素添加到指定 collection 中。        Count obj = new Count();
            List list = obj.countGrade(arrl);        for(Iterator iterator = list.iterator(); iterator.hasNext();)
            {
                Count count = (Count) iterator.next();
                System.out.println(count.name + "\t" + count.avgGrade + "\t" + count.totalGrade);
            }    }
        public List countGrade(ArrayList list)
        {
            String name = "";
            Count count = null;
            ArrayList gradeList = new ArrayList();        for(Iterator it = list.iterator(); it.hasNext();)
            {
                StudentGrade st = (StudentGrade) it.next();            name = st.name;
                int lessonNum = 0;
                float totalGrade = 0f;
                float avgGrade = 0f;            for(Iterator it2 = list.iterator(); it2.hasNext();)
                {
                    StudentGrade st2 = (StudentGrade) it2.next();                if(name.equals(st2.name))
                    {
                        lessonNum += 1;
                        totalGrade += st2.grade;
                        avgGrade = totalGrade / lessonNum;
                    }
                }
                count = new Count();
                count.name = name;
                count.avgGrade = avgGrade;
                count.totalGrade = totalGrade;            if(!gradeList.contains(count))
                {
                    gradeList.add(count);
                }        }        //排序
            Collections.sort(gradeList, new Comparator()
            {            public int compare(Object o1, Object o2)
                {
                    Count obj = (Count) o1;
                    Count other = (Count) o2;
                    if(obj.avgGrade > other.avgGrade)
                    {
                        return 1;
                    }
                    if(obj.avgGrade == other.avgGrade)
                    {
                        return 0;
                    }
                    else
                    {
                        return -1;
                    }
                }        });
            return gradeList;
        }
        public boolean equals(Object obj)
        {
            if(obj == null)
            {
                return false;
            }        if(obj instanceof Count)
            {
                Count other = (Count) obj;            return (this.name == other.name);
            }
            else
            {
                return false;
            }    }
        public int hashCode()
        {
            return super.hashCode();
        }}class StudentGrade
    {
        public String name;
        public String lesson;
        public float grade;
        public StudentGrade(String name, String lesson, float grade)
        {
            this.name = name;
            this.lesson = lesson;
            this.grade = grade;
        }}
      

  17.   

    结果
    yr5 70.0 70.0
    yr 78.0 234.0
    yr1 94.0 188.0
      

  18.   

    我是java初学者,根据楼主的题目写了下,代码很搓,大家见谅啊~~============================================================================================package test;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class PrintStudent {

    public static List<StudentDetail> processStudentGrade(List<StudentGrade> list){
    List<StudentDetail> sds = new ArrayList<StudentDetail>();
    Map<String,List<Object>> map = new HashMap<String,List<Object>>(); 

    for(StudentGrade sg : list){
    String name = sg.name;
    Integer grade = sg.grade;
    if(map.containsKey(name)){
    List temp = map.get(name);
    Integer totolGrade = (Integer)temp.get(0);
    temp.set(0, (totolGrade+grade));
    Integer count = (Integer)temp.get(1);
    temp.set(1, count+1);

    }else{
    List save = new ArrayList();
    save.add(grade);
    save.add(1);
    save.add(name);
    map.put(name, save);
    }
    }
    Set<String> set = map.keySet();
    Iterator it = set.iterator();
    while(it.hasNext()){
    String name =(String) it.next();
    List<Object> l = map.get(name);
    StudentDetail sd = new StudentDetail();
    sd.setName((String)l.get(2));
    int totalGrade = (Integer)l.get(0);
    sd.setTotalGrade(totalGrade);
    sd.setAveGrade(totalGrade/(Integer)l.get(1));
    sds.add(sd);
    }
    return sds;
    }

    public static void print(List<StudentDetail> list){
    Collections.sort(list);
    System.out.println("Name\tTotalgrade\tavgGrade");
    for(int i = 0 ;i<list.size();i++ ){
    StudentDetail sd = list.get(i);
    System.out.println(sd.getName()+"\t"+sd.getTotalGrade()+"\t"+sd.getAveGrade());
    }
    }
    public static void main(String[] args) {
    List<StudentGrade> students = new ArrayList<StudentGrade>();
        students.add(new StudentGrade("John", "PE", 90));
        students.add(new StudentGrade("Mary", "Math", 90));
        students.add(new StudentGrade("John", "English", 70));
        students.add(new StudentGrade("Mary", "Music", 90));
        students.add(new StudentGrade("Iris", "Article", 60));
        students.add(new StudentGrade("Mary", "English", 70));
        students.add(new StudentGrade("Iris", "PE", 90));
        students.add(new StudentGrade("John", "Math", 80));
        students.add(new StudentGrade("John", "PE", 90));
        students.add(new StudentGrade("John", "PE", 90));
        students.add(new StudentGrade("Iris", "Article", 100));
        students.add(new StudentGrade("Iris", "Article", 100));
        students.add(new StudentGrade("Iris", "Article", 100));
        students.add(new StudentGrade("Iris", "Article", 100));
        
        PrintStudent.print(PrintStudent.processStudentGrade(students));
        
    }
    }
    ============================================================================================
    package test;public class StudentDetail implements Comparable {
    private String name;
    private int totalGrade;
    private double aveGrade;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getTotalGrade() {
    return totalGrade;
    }
    public void setTotalGrade(int totalGrade) {
    this.totalGrade = totalGrade;
    }
    public double getAveGrade() {
    return aveGrade;
    }
    public void setAveGrade(double aveGrade) {
    this.aveGrade = aveGrade;
    }
    @Override
    public int compareTo(Object o) {
    if(o instanceof StudentDetail){
    StudentDetail sd = (StudentDetail) o;
    return (int) (aveGrade  - (int)sd.getAveGrade());
    }
    return 0;
    }

    }