有一个记事本,能记录周一到周天,每天做的所有事情和事情的次数,周而复始。小明在这个记事本上记录了3周,内容如下:
第1周
- 周1:学java,逛街
- 周2:打台球,旅游
- 周3:溜冰,吃烧烤
- 周4:打篮球,逛街,吃烧烤
- 周5:学前端,溜冰
- 周6:逛街,吃烧烤
- 周7:旅游,打台球
第2周:
- 周1:学java,学前端
- 周2:打台球,溜冰,学java
- 周3:旅游,吃烧烤
- 周4:逛街,学java
- 周5:学前端,旅游
- 周6:逛街,打台球,吃烧烤
- 周7:旅游,逛街,打台球,吃烧烤
第3周:
- 周1:学java,学前端,学python
- 周2:打台球,溜冰,学java,学C++
- 周3:旅游,吃烧烤,吃冰淇淋
- 周4:逛街,学java,吃烧烤
- 周5:学前端,旅游,打高尔夫
- 周6:逛街,打台球,吃烧烤,溜冰,蹦迪
- 周7:旅游,逛街,打台球,吃烧烤,跑步
使用Scanner接收小明3周所做的所有事情,并存入相应的集合中。然后输出周一到周五(不区分第几周)小明所做的所有事情以及相应的次数。(要求:所选的集合都要用泛型进行约束。)
代码如下:
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
//week 有7天,共7个元素
TreeMap<String, Map<String,Integer>> week = new TreeMap<String, Map<String,Integer>>();
//数据录入
for (int i = 1; i <= 3; i++) {
System.out.println("第"+i+"周:");
Map<String, Integer> map;
for (int j = 1; j <= 7 ; j++) {
map= new HashMap<String, Integer>();//每天都会清空昨天的事情和次数
System.out.println("周"+j+":");
String things = sc.next();//旅游,逛街,旅游,打台球,吃烧烤,跑步
String[] things_arr = things.split(",");//通过","来分割字符串,并放入数组
for (String s : things_arr) {
//map存入的是:事情和次数
map.put(s,map.containsKey(s)?map.get(s)+1:1);//查找map中是否有相同的事情,如果有,次数加1
}
//第二周,第三周的是在第一周的基础上加入的
if(week.containsKey("周"+j)){
Map<String, Integer> map1 = week.get("周" + j);
mapAddMap(map1,map);
//week.put("周"+j,map);
}else {//集合中最开始是没有数据的,第一周直接存入
week.put("周"+j,map);
}
}
}
//数据输出 week
Set<Map.Entry<String, Map<String, Integer>>> weeks = week.entrySet();
for (Map.Entry<String, Map<String, Integer>> week1 : weeks) {
System.out.println(week1.getKey()+":");
Map<String, Integer> map = week1.getValue();
Set<Map.Entry<String, Integer>> things = map.entrySet();
for (Map.Entry<String, Integer> thing : things) {
String key = thing.getKey();
Integer count = thing.getValue();
System.out.print(key+"--"+count+"次 \t");
}
System.out.println();//换行
}
}
//在周一的基础上融合
public static void mapAddMap(Map<String ,Integer> map1,Map<String ,Integer> map2){
Set<String> map2key = map2.keySet();
for (String m2key : map2key) {
map1.put(m2key,map1.containsKey(m2key)?map1.get(m2key)+map2.get(m2key):map2.get(m2key));
}
}
运行结果:
第1周:
周1:
学java,逛街
周2:
打台球,旅游
周3:
溜冰,吃烧烤
周4:
打篮球,逛街,吃烧烤
周5:
学前端,溜冰
周6:
逛街,吃烧烤
周7:
旅游,打台球
第2周:
周1:
学java,学前端
周2:
打台球,溜冰,学java
周3:
旅游,吃烧烤
周4:
逛街,学java
周5:
学前端,旅游
周6:
逛街,打台球,吃烧烤
周7:
旅游,逛街,打台球,吃烧烤
第3周:
周1:
学java,学前端,学python
周2:
打台球,溜冰,学java,学C++
周3:
旅游,吃烧烤,吃冰淇淋
周4:
逛街,学java,吃烧烤
周5:
学前端,旅游,打高尔夫
周6:
逛街,打台球,吃烧烤,溜冰,蹦迪
周7:
旅游,逛街,打台球,吃烧烤,跑步
周1:
学java--3次 学前端--2次 学python--1次 逛街--1次
周2:
学java--1次 溜冰--2次 打台球--3次 学java,学C++--1次 旅游--1次
周3:
吃烧烤,吃冰淇淋--1次 溜冰--1次 吃烧烤--2次 旅游--2次
周4:
学java--2次 打篮球--1次 吃烧烤--2次 逛街--3次
周5:
学前端--3次 溜冰--1次 打高尔夫--1次 旅游--2次
周6:
蹦迪--1次 吃烧烤--3次 溜冰--1次 逛街--3次 打台球--2次
周7:
跑步--1次 吃烧烤--2次 打台球--3次 逛街--2次 旅游--3次