成绩排序怎么弄?

成绩排序怎么弄?

import java.util.*;

public class School{
    Map<String,BanJi>schoolMap;

    public School(){
        schoolMap=new HashMap<String,BanJi>();
    }

    /**
     * 添加班级
     * @param banji
     */
    public void addBanji(BanJi banji){
       schoolMap.put(banji.getClassName(),banji);
    }

    /**
     * 删除班级
     * @param banji
     */
    public void deleteBanji(BanJi banji){
        schoolMap.remove(banji.getClassName());
    }

    /**
     * 通过班级名称查询班级
     * @param className
     * @return
     */
    public BanJi searchByName(String className) {
        BanJi bj=null;
        Set<String> setbanji=schoolMap.keySet();
        for(String se:setbanji){
            if(se.equals(className)){
                bj=schoolMap.get(se);
                break;
            }
        }
        return bj;
    }

    /**
     * 对各班语文成绩按平均分进行由大到小排序:
     */
    public void sortChineseByAverage() {
       List<Map.Entry<String,BanJi>> ln=new ArrayList<Map.Entry<String,BanJi>>();
      


    }




    public Map<String, BanJi> getSchoolMap() {
        return schoolMap;
    }

    public void setSchoolMap(Map<String, BanJi> schoolMap) {
        this.schoolMap = schoolMap;
    }



}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,老师这里对成绩排序的功能给同学一个思路,同学可以尝试实现一下:

1.在schoolMap存储的是班级编号和班级信息,而在班级信息中有所有学生的集合。那么可以单独声明一个Map集合,key就是班级名称,value是该班级的平均成绩值。

2.此时可以先遍历schoolMap,每次得到的班级信息中,取出学生集合,把集合中的成绩信息汇总并求得平均值。

3.将班级名称和平均成绩存储在第一步的集合中。

4.此时由于班级和平均成绩是存在Map集合中的,而Map集合无法直接排序,所以要将这些信息转换到一个List集合中。所以声明一个List集合,用于存储所有Entry对象。

5.声明一个比较器,比较规则就是根据Entry中的平均成绩做排序。

6.使用比较器对第四步的List进行排序。

7.输出排序后的List信息,即展示排序结果。这里需要注意的是,主班级列表应当不参与排序。

以上就是实现的思路,建议同学自己动手尝试实现一下。

祝学习愉快~


  • Itroads #1
    public class School {
    	Map<String ,Banji> schoolMap;
    	public School(){
    		schoolMap=new HashMap<String,Banji>();
    	}
    	/**
    	 * 向学校里添加班级
    	 * @param banji
    	 */
    public void addBanji(Banji banji){
    		schoolMap.put(banji.getClassName(), banji);
    	}
    /**
     * 删除班级
     * @param banji
     */
    public void deleteBanji(Banji banji){
    	schoolMap.remove(banji.getClassName());
    	System.out.println("删除班级成功");
    	
    }
    /**
     * 通过班级名称查找班级
     * @param className
     * @return
     */
    public Banji searchByName(String className) {
    	Banji banji=null;
    	Set<String> banjiSet=schoolMap.keySet();
    	for(String b:banjiSet){
    		if(b.equals(className)){
    			banji=schoolMap.get(b);
    		}
    	}
    	return banji;
    	
    }
    /**
     * 对语文平均成绩从小到大排序
     */
    public void sortChineseByAverage() {
    	//key为班级名称,value是该班级的平均成绩
    	Map<String,String> score=new HashMap<String,String>();
         Iterator<Banji> information=schoolMap.values().iterator();
         while(information.hasNext()){
        	 System.out.println(information.next().getStuList());
         }
         for(int i=0;i<=information)
         
    	 
    
    }
    /**
     * 对数学平均成绩从小到大排序
     */
    public void sortMathByAverage() {
    	
    }
    /**
     * 显示所有班级名称
     */
    public void displayBanJiName() {
    	Set<String> banjiSet=schoolMap.keySet();
    	for(String s:banjiSet){
    		System.out.println(s);
    	}
    }
    	public Map<String, Banji> getSchoolMap() {
    		return schoolMap;
    	}
    	public void setSchoolMap(Map<String, Banji> schoolMap) {
    		this.schoolMap = schoolMap;
    	}
    	
    }
    第二步怎么汇总取平均值呢


    2022-04-14 08:44:19
  • 同学你好,同学可以先查询出班级的总成绩,然后根据班级中的人数计算出平均分,将平均分添加到集合中,最后进行排序。参考代码如下所示:

    https://img1.sycdn.imooc.com//climg/614c2980092e210c11570757.jpg

    祝学习愉快!

    2022-04-14 09:50:12
  • 老师,您这个方法里怎么得到的这个分数  getChinese   在学生类增加了一个分数属性吗? 然后增加getter和setter方法?

    2022-05-27 22:44:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师