利用map以及HashMap进行分解存储

本文介绍了一个使用Java实现的成绩统计系统,通过面向对象的设计方法,利用Map进行分解存储,实现了对学生成绩的管理和统计功能,包括计算班级总成绩及平均成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务:求每个班的学生总成绩和平均成绩

利用面向对象+分解存储
Student类javabean类

public class Student {

//属性

private String name;//学生姓名
private int score;//学生成绩
private String classno;//学生所在班级编号
//构造方法集settergetter方法

}

ClassRoom类javabean类

public class ClassRoom {

//属性

private String classno;//班级编号
private int total;//班级总分
private List<Student> stulist;//学生列表,一个班级含有多个学生

public ClassRoom(){

stulist=new ArrayList<Student>();//空构造器加入学生列表的初始化,防止空指针异常

        }

        public ClassRoom(String no){
this();
this.classno=no;
}

//构造方法集settergetter方法

分解存储

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 Mapdemo {
public static void main(String args[]){
List list=exam();
Map ds=count(list);
view(ds);

}

/**利用迭代器打印成绩/

public static void view(Map<String,ClassRoom> map){
Set<String> set=map.keySet();
Iterator <String>it=set.iterator();
while(it.hasNext()){
String classno=it.next();
int total=map.get(classno).getTotal();
ClassRoom classroom=map.get(classno);
int meanscore=total/classroom.getStulist().size();
System.out.println(classno+"的总分是"+total+",平均分是"+meanscore);
}

}

/**利用map分解存储/

public static Map<String,ClassRoom> count(List<Student> list){
Map<String,ClassRoom> map=new HashMap();
for(Student stu:list){
String classno=stu.getClassno();//学生的班级编号
int stuscore=stu.getScore();//学生的成绩
ClassRoom classroom=map.get(classno);
if(classroom==null){//若map中没有该key,创建一个袋子进行存储
classroom=new ClassRoom(classno);//ClassRoom中加入一个带参数构造器
classroom.setTotal(stuscore);
map.put(classno, classroom);
}

classroom.getStulist().add(stu);//map中已经包含这个key,对value进行操作,改变这个key对应的ClassRoom的总成绩属性值

classroom.setTotal(stuscore+classroom.getTotal());
//System.out.println(classroom.getTotal()+"if");
map.put(classno, classroom);
}
return map;
}
/**
* 模拟考试
* @return
*/
public static List<Student>exam(){
List <Student> list=new ArrayList<Student>();
list.add(new Student("小王","一班",89));
list.add(new Student("小离","一班",82));
list.add(new Student("小花","一班",90));
list.add(new Student("小明","二班",56));
list.add(new Student("小翠","二班",98));
return list;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值