• Java之Collections的综合小练习


    3. 综合练习

    练习1:随机点名器

    需求:班级里有N个学生,实现随机点名器

    代码实现:

    1. public class Test1 {
    2.    public static void main(String[] args) {
    3.        /* 班级里有N个学生,学生属性:姓名,年龄,性别。
    4.        实现随机点名器。*/
    5.        //1.定义集合
    6.        ArrayList list = new ArrayList<>();
    7.        //2.添加数据
    8.        Collections.addAll(list,"范闲","范建","范统","杜子腾","杜琦燕","宋合泛","侯笼藤","朱益群","朱穆朗玛峰","袁明媛");
    9.        //3.随机点名
    10.        /* Random r = new Random();
    11.        int index = r.nextInt(list.size());
    12.        String name = list.get(index);
    13.        System.out.println(name);*/
    14.        //打乱
    15.        Collections.shuffle(list);
    16.        String name = list.get(0);
    17.        System.out.println(name);
    18.   }
    19. }

    练习2:带概率的随机

    需求:

    班级里有N个学生

    要求在随机的时候,70%的概率随机到男生,30%的概率随机到女生

    代码实现:

    1. public class Test2 {
    2.    public static void main(String[] args) {
    3.        /* 班级里有N个学生
    4.        要求:
    5.        70%的概率随机到男生
    6.        30%的概率随机到女生
    7.        "范闲","范建","范统","杜子腾","宋合泛","侯笼藤","朱益群","朱穆朗玛峰",
    8.        "杜琦燕","袁明媛","李猜","田蜜蜜",
    9.        */
    10.        //1.创建集合
    11.        ArrayList list = new ArrayList<>();
    12.        //2.添加数据
    13.        Collections.addAll(list,1,1,1,1,1,1,1);
    14.        Collections.addAll(list,0,0,0);
    15.        //3.打乱集合中的数据
    16.        Collections.shuffle(list);
    17.        //4.从list集合中随机抽取0或者1
    18.        Random r = new Random();
    19.        int index = r.nextInt(list.size());
    20.        int number = list.get(index);
    21.        System.out.println(number);
    22.        //5.创建两个集合分别存储男生和女生的名字
    23.        ArrayList boyList = new ArrayList<>();
    24.        ArrayList girlList = new ArrayList<>();
    25.        Collections.addAll(boyList,"范闲","范建","范统","杜子腾","宋合泛","侯笼藤","朱益群","朱穆朗玛峰");
    26.        Collections.addAll(girlList,"杜琦燕","袁明媛","李猜","田蜜蜜");
    27.        //6.判断此时是从boyList里面抽取还是从girlList里面抽取
    28.        if(number == 1){
    29.            //boyList
    30.            int boyIndex = r.nextInt(boyList.size());
    31.            String name = boyList.get(boyIndex);
    32.            System.out.println(name);
    33.       }else{
    34.            //girlList
    35.            int girlIndex = r.nextInt(girlList.size());
    36.            String name = girlList.get(girlIndex);
    37.            System.out.println(name);
    38.       }
    39.   }
    40. }

    练习3:随机不重复

    需求:

    班级里有N个学生,被点到的学生不会再被点到。但是如果班级中所有的学生都点完了, 需要重新开启第二轮点名。

    代码实现:

    1. public class Test3 {
    2.    public static void main(String[] args) {
    3.       /* 班级里有5个学生
    4.        要求:
    5.        被点到的学生不会再被点到。
    6.        但是如果班级中所有的学生都点完了,需要重新开启第二轮点名。*/
    7.        //1.定义集合
    8.        ArrayList list1 = new ArrayList<>();
    9.        //2.添加数据
    10.        Collections.addAll(list1, "范闲", "范建", "范统", "杜子腾", "杜琦燕", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰", "袁明媛");
    11.        //创建一个临时的集合,用来存已经被点到学生的名字
    12.        ArrayList list2 = new ArrayList<>();
    13.        //外循环:表示轮数
    14.        for (int i = 1; i <= 10; i++) {
    15.            System.out.println("=========第" + i + "轮点名开始了======================");
    16.            //3.获取集合的长度
    17.            int count = list1.size();
    18.            //4.随机点名
    19.            Random r = new Random();
    20.            //内循环:每一轮中随机循环抽取的过程
    21.            for (int j = 0; j < count; j++) {
    22.                int index = r.nextInt(list1.size());
    23.                String name = list1.remove(index);
    24.                list2.add(name);
    25.                System.out.println(name);
    26.           }
    27.            //此时表示一轮点名结束
    28.            //list1 空了 list2 10个学生的名字
    29.            list1.addAll(list2);
    30.            list2.clear();
    31.       }
    32.   }
    33. }

    练习4:集合的嵌套

    需求:

    定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。

    添加完毕后,遍历结果格式如下:

    江苏省 = 南京市,扬州市,苏州市,无锡市,常州市

    湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市

    河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市

    代码实现:

    1. public class Test4 {
    2.    public static void main(String[] args) {
    3.        /* 需求
    4.        定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。
    5.        添加完毕后,遍历结果格式如下:
    6.                江苏省 = 南京市,扬州市,苏州市,无锡市,常州市
    7.                湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市
    8.                河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市*/
    9.        //1.创建Map集合
    10.        HashMap> hm = new HashMap<>();
    11.        //2.创建单列集合存储市
    12.        ArrayList city1 = new ArrayList<>();
    13.        city1.add("南京市");
    14.        city1.add("扬州市");
    15.        city1.add("苏州市");
    16.        city1.add("无锡市");
    17.        city1.add("常州市");
    18.        ArrayList city2 = new ArrayList<>();
    19.        city2.add("武汉市");
    20.        city2.add("孝感市");
    21.        city2.add("十堰市");
    22.        city2.add("宜昌市");
    23.        city2.add("鄂州市");
    24.        ArrayList city3 = new ArrayList<>();
    25.        city3.add("石家庄市");
    26.        city3.add("唐山市");
    27.        city3.add("邢台市");
    28.        city3.add("保定市");
    29.        city3.add("张家口市");
    30.        //3.把省份和多个市添加到map集合
    31.        hm.put("江苏省",city1);
    32.        hm.put("湖北省",city2);
    33.        hm.put("河北省",city3);
    34.        Set>> entries = hm.entrySet();
    35.        for (Map.Entry> entry : entries) {
    36.            //entry依次表示每一个键值对对象
    37.            String key = entry.getKey();
    38.            ArrayList value = entry.getValue();
    39.            StringJoiner sj = new StringJoiner(", ","","");
    40.            for (String city : value) {
    41.                sj.add(city);
    42.           }
    43.            System.out.println(key + " = " + sj);
    44.       }
    45.   }
    46. }

  • 相关阅读:
    Oracle GoldenGate实现数据同步(Windows环境下的内外网同步)
    Python每日一练(牛客数据分析篇新题库)——第37天:合并
    微信小程序内嵌h5页面,实现动态设置顶部标题的功能
    佳能相机拍出来的dat文件怎么修复为正常视频
    Mongodb支持事务吗?
    基于SSH开发简单的学校失物招领系统
    Vue 组件 ref属性
    EFLK日志平台(filebeat-->kafka-->logstash-->es-->kiabana)
    Jenkins+ant+mysql 自动化构建脚本文件输出日志
    SQL拼接动态创建表A关联数据库表B查询(数据分区储存)
  • 原文地址:https://blog.csdn.net/qq_69748833/article/details/132914613