有个ArrayList,里面存3000学生成绩对象,如
class StuGra{
 String stuName;//学生名字
 String courseName;//课程名称
 Integer courseRes;//该课程的成绩
 }
里面一个学生因选多门课程就拥有多个StuName对象。
要求用最有效率的代码实现:
以这种格式在控制台输出结果:
StuName(学生名)   total(总分)  avg(平均分)

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【ahujyy】截止到2008-08-02 16:38:29的历史汇总数据(不包括此帖):
    发帖的总数量:10                       发帖的总分数:70                       每贴平均分数:7                        
    回帖的总数量:16                       得分贴总数量:4                        回帖的得分率:25%                      
    结贴的总数量:10                       结贴的总分数:70                       
    无满意结贴数:6                        无满意结贴分:65                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:60.00 %               无满意结分率:92.86 %                  
    敬礼!

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=ahujyy
      

  2.   

    先对arraylist按姓名排序,然后输出
      

  3.   

    里面一个学生因选多门课程就拥有多个StuName对象。 
    我写错了
    里面一个学生因选多门课程就拥有多个StuGra对象。 
    按姓名排序后 怎么判断有几个连续的对象呢?这样才能算总和和均值啊
    能详细点么。
      

  4.   

    o了。。大体给你表示下。。
    肯定不是效率最好的,不过结果是对的你看下吧。。package com.zhangkai.test;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;class StuGra {
    String stuName;// 学生名字
    String courseName;// 课程名称
    int courseRes;// 该课程的成绩 public String getStuName() {
    return stuName;
    } public void setStuName(String stuName) {
    this.stuName = stuName;
    } public String getCourseName() {
    return courseName;
    } public void setCourseName(String courseName) {
    this.courseName = courseName;
    } public int getCourseRes() {
    return courseRes;
    } public void setCourseRes(int courseRes) {
    this.courseRes = courseRes;
    }}public class TestList { public static void main(String[] args) {
    StuGra temp1 = new StuGra();
    temp1.setStuName("你");
    temp1.setCourseName("语文");
    temp1.setCourseRes(99);

    StuGra temp2 = new StuGra();
    temp2.setStuName("你");
    temp2.setCourseName("数学");
    temp2.setCourseRes(86);

    StuGra temp3 = new StuGra();
    temp3.setStuName("我");
    temp3.setCourseName("语文");
    temp3.setCourseRes(100);

    StuGra temp4 = new StuGra();
    temp4.setStuName("他");
    temp4.setCourseName("数据结构");
    temp4.setCourseRes(50);
    StuGra temp5 = new StuGra();
    temp1.setStuName("你");
    temp1.setCourseName("java");
    temp1.setCourseRes(56);

    List<StuGra> list = new ArrayList<StuGra>();
    list.add(temp1);
    list.add(temp2);
    list.add(temp3);
    list.add(temp4);
    Map<String, Integer> map = new HashMap<String, Integer>();
    Map<String, Integer> map2 = new HashMap<String, Integer>();
    for (StuGra sg : list) {
    StuGra s = sg;
    map2.put(s.getStuName(), 1);
    if (map.containsKey(s.getStuName())) {
    int i = map.get(s.getStuName()).intValue();
    int j = map2.get(s.getStuName());
    j  += 1;
    i += s.getCourseRes();
    map.put(s.getStuName(), i);
    map2.put(s.getStuName(), j);
    } else {

    map.put(s.getStuName(), s.getCourseRes());
    }
    }
    Set s = map.keySet();
    for (Object i : s) {
    double j = map.get(i) / map2.get(i);
    System.out.println(i.toString() + "的平均分是:" + j);
    System.out.println(i.toString() + "的总分是:" + map.get(i));
    }

    }}
    结果:
    他的平均分是:50.0
    他的总分是:50
    我的平均分是:100.0
    我的总分是:100
    你的平均分是:71.0
    你的总分是:142
    自己按格式排好就行了。。
      

  5.   

    只表示了一下,因为lz没给数据,所以list里哪来那么多的数据测试啊。
      

  6.   

    如果在zhangkai的代码前用Collecitons.sort(al,myComparator)按名字排序是能达到最后结果按名字排序的目的。但如果要求按总分递减输出来,怎么办呢?
      

  7.   

    这是使用sort按名字排的。你如果按总分的话,最好在StuGra中增添一个总分变量,这样才好在compare方法中调用。import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;class StuGra {
        String stuName;// 学生名字
        String courseName;// 课程名称
        int courseRes;// 该课程的成绩    public String getStuName() {
            return stuName;
        }    public void setStuName(String stuName) {
            this.stuName = stuName;
        }    public String getCourseName() {
            return courseName;
        }    public void setCourseName(String courseName) {
            this.courseName = courseName;
        }    public int getCourseRes() {
            return courseRes;
        }    public void setCourseRes(int courseRes) {
            this.courseRes = courseRes;
        }}public class test {    public static void main(String[] args) {
                StuGra temp1 = new StuGra();
                temp1.setStuName("你");
                temp1.setCourseName("语文");
                temp1.setCourseRes(99);
                
                StuGra temp2 = new StuGra();
                temp2.setStuName("你");
                temp2.setCourseName("数学");
                temp2.setCourseRes(86);
                
                StuGra temp3 = new StuGra();
                temp3.setStuName("我");
                temp3.setCourseName("语文");
                temp3.setCourseRes(100);
                
                StuGra temp4 = new StuGra();
                temp4.setStuName("他");
                temp4.setCourseName("数据结构");
                temp4.setCourseRes(50);
                StuGra temp5 = new StuGra();
                temp5.setStuName("你");
                temp5.setCourseName("java");
                temp5.setCourseRes(56);
                
            List<StuGra> list = new ArrayList<StuGra>();
            list.add(temp1);
            list.add(temp2);
            list.add(temp3);
            list.add(temp4);
            list.add(temp5);
            Collections.sort(list, new CompareStu());
            int cur = 0;
            String name = list.get(cur).getStuName();
            int ts = 0;
            int sc = 0;
            for(int i =0;i<list.size();i++)
            {
                StuGra stu = list.get(i);
                if(name.equals(stu.getStuName()))
                {
                    sc++;
                    ts += stu.getCourseRes();
                }else{
                    System.out.println(name + " " + ts+" "+(ts/(float)sc));
                    sc = 0;
                    ts = 0;
                    name = stu.getStuName();
                    i--;
                }
            }
            System.out.println(name + " " + ts+" "+(ts/(float)sc));    }}class CompareStu implements Comparator {public int compare(Object sourceObj, Object targetObj) {
       StuGra source = (StuGra) sourceObj;
       StuGra target = (StuGra) targetObj;
       int n = 0;
       String sn = source.getStuName();
       String tn = target.getStuName();
       if(sn.compareTo(tn)<0)//sn tn
           n = -1;
       else if(sn.compareTo(tn)>0)
           n = 1;
       else
           n = 0;
       return n;
    }}