需求:某个班级80名学生,现在需要组成秋游活动,班长提供了四个景点依次是(A、B、C、D),
每个学生只能选择一个景点,请统计出最终哪个景点想去的人数最多。
public class MapTest {
public static void main(String[] args) {
// 1、要求程序记录每个学生选择的情况。
// 使用一个Map集合存储。
Map<String, List<String>> data = new HashMap<>();
// 2、把学生选择的数据存入进去。
Integer studentID = 1; // 用学号代替姓名,
// 所有选项存储在selectsAll中。
List<String> selectsAll = new ArrayList<>();
Collections.addAll(selectsAll,"A", "B", "C", "D");
for (int i = 0; i < 80; i++) {
List<String> selected = new ArrayList<>(); //用于保存某学生选择景点
Random r = new Random(); //学生选择的随机数。
int selects_num= r.nextInt(4)+1; //学生选择的项数(不超过4项),随机产生[1,5)之间的随机整数 。
//根据学生选择的项数,将某学生选择的景点存放在selected。
for (int j = 1; j <= selects_num; j++) {
int select_index = r.nextInt(4); //随机选择["A", "B", "C", "D"]这个数组中的索引
while(seleced.size()<j) {
if(!selected.contains(selectsAll.get(select_index))) //检测选择的项,是否已经选择过了,
{
selected.add(selectsAll.get(select_index));
}else{ //如果包含说明已经选择过了,重新选择
select_index = r.nextInt(4);
}
}
}
data.put( studentID.toString(),selected);
studentID++; //学生学号自动加1
}
// 3、统计每个景点选择的人数。
Map<String, Integer> infos = new HashMap<>(); // {}
// 4、提取所有人选择的景点的信息。
Collection<List<String>> values = data.values();
System.out.println(values);
for (List<String> value : values) {
for (String s : value) {
// 有没有包含这个景点
if(infos.containsKey(s)){
infos.put(s, infos.get(s) + 1);
}else {
infos.put(s , 1);
}
}
}
System.out.println(infos);
}
}