Java基础之基于HashMap的分挑存储例子

举报
yd_273762914 发表于 2020/12/03 01:14:29 2020/12/03
5.3k+ 0 0
【摘要】 按班级统计学生的平均成绩时,为了减少工作量,计划使用计算机来做这样的统计工作。 下面给出一个类Score用来表示每条考试成绩。   package com.test; /** * 学生成绩。 */class Score { /** * 学生姓名。 */ public String stdName; /** * 班级号。 */ public String cla...

按班级统计学生的平均成绩时,为了减少工作量,计划使用计算机来做这样的统计工作。

下面给出一个类Score用来表示每条考试成绩。


      package com.test;
      /**
       * 学生成绩。
       */
      class Score {
      /**
       * 学生姓名。
       */
      public String stdName;
      /**
       * 班级号。
       */
      public String classNumber;
      /**
       * 分数。
       */
      public int mark;
     	public String getStdName() {
     		return stdName;
      	}
     	public void setStdName(String stdName) {
     		this.stdName = stdName;
      	}
     	public String getClassNumber() {
     		return classNumber;
      	}
     	public void setClassNumber(String classNumber) {
     		this.classNumber = classNumber;
      	}
     	public int getMark() {
     		return mark;
      	}
     	public void setMark(int mark) {
     		this.mark = mark;
      	}
      }
  
 

编写一个类ScoreStatistic,在类里实现以下方法:


      package com.test;
      import java.util.ArrayList;
      import java.util.HashMap;
      import java.util.Iterator;
      import java.util.List;
      import java.util.Map;
      import java.util.Set;
      public class ScoreStatistic{
      public ScoreStatistic(){
       }
      public Map<String,Integer> statistic1(List<Score> scores){
      		Map<String,Integer> classcountMap = new HashMap<String, Integer>();
      		Map<String,Integer> classsumMap = new HashMap<String, Integer>();
      		Iterator<Score> it = scores.iterator();
     		while (it.hasNext()) {
      			Score temp = it.next();
      			String cn = temp.classNumber;
     			int cm = temp.mark;
      // System.out.println(it.next().classNumber+"+"+it.next().mark);
     			if(classcountMap.get(cn)!=null){System.out.println("1");
       classcountMap.put(cn, classcountMap.get(cn)+1);
       classsumMap.put(cn, classsumMap.get(cn)+cm);
      			}else{
       classcountMap.put(cn, 1);
       classsumMap.put(cn,cm);
      			}
      		}
      		Map<String, Integer> finalMap = new HashMap<String, Integer>();
      		Iterator it1=classcountMap.keySet().iterator();
     		while(it1.hasNext()){
       String key;
       Integer value;
       Integer marksum;
       key=it1.next().toString();
       value=classcountMap.get(key);
       marksum=classsumMap.get(key); System.out.println(value);
       finalMap.put(key, marksum/value);
       System.out.println(key+":"+marksum/value);
      		}
     		return classsumMap;
      	}
      public Map<String,Integer> statistic(List<Score> scores){
      		Map<String,Integer> map = new HashMap<String,Integer>();
      		Map<String,ClassRoom> roomMap = new HashMap<String,ClassRoom>();
     		int avg;
      		ClassRoom room = null;
     		for(Score score:scores){
      			String classNumber = score.getClassNumber();
     			int mark = score.getMark();
      			room = roomMap.get(classNumber);
     			if(room == null){
       room = new ClassRoom(classNumber);
       roomMap.put(classNumber, room);
      			}
      			room.setTotal(room.getTotal()+mark);
      			room.getList().add(score);
     			//System.out.println(score.getClassNumber()+":"+avg);
      		}
      		Set<Map.Entry<String,ClassRoom>> set = roomMap.entrySet();
      		Iterator<Map.Entry<String, ClassRoom>> it = set.iterator();
     		while(it.hasNext()){
      			Map.Entry<String, ClassRoom> entry = it.next();
      			ClassRoom ro = entry.getValue();
      			avg = ro.getTotal()/ro.getList().size();
      			map.put(ro.getClassNumber(), avg);
      			System.out.println(ro.getClassNumber()+":"+avg);
      		}
     		return map;
      	}
      class ClassRoom{
      /**
       * 班级号。
       */
      public String classNumber;
      /**
       * 总分
       */
      private int total;
      private List<Score> list;
      public ClassRoom(){
       list = new ArrayList<Score>();
       }
      public ClassRoom(String classNumber){
      this();
      this.classNumber = classNumber;
       }
     		public String getClassNumber() {
     			return classNumber;
      		}
     		public void setClassNumber(String classNumber) {
     			this.classNumber = classNumber;
      		}
     		public int getTotal() {
     			return total;
      		}
     		public void setTotal(int total) {
     			this.total = total;
      		}
     		public List<Score> getList() {
     			return list;
      		}
     		public void setList(List<Score> list) {
     			this.list = list;
      		}
       }
      }
  
 

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/53183675

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。