集合嵌套:80名学生,从四个景点随机选择多个景点,统计出最终哪个景点想去的人数最多

该程序使用Java实现,通过Map集合记录80名学生的景点选择情况。每个学生从A、B、C、D四个景点中随机选择,程序通过生成随机数模拟选择过程,并统计每个景点被选择的次数。最后,程序输出每个景点的选择人数。
摘要由CSDN通过智能技术生成

需求:某个班级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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值