集合的练习题

这篇具有很好参考价值的文章主要介绍了集合的练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

练习1:随机点名器

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

public class W1随机点名器 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "范闲", "范建", "范统", "杜子腾", "杜琦燕", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰", "袁明媛");
        // 思路一:
        Random r = new Random();
		System.out.println("随机点到的是");
		int n = r.nextInt(list.size());
		System.out.println(list.get(n));
        System.out.println("点名结束");
        // 思路二 打乱集合,在获取第一个
        Collections.shuffle(list);
        System.out.println(list.get(0));
		System.out.println("点名结束");
		
        input.close();
    }
}

练习2:带概率的随机

需求:
​ 班级里有N个学生
​ 要求在随机的时候,70%的概率随机到男生,30%的概率随机到女生

    public static void main(String[] args) {
        // 班级有N名学生
        ArrayList<String> boyList = new ArrayList<>();
        ArrayList<String> girlList = new ArrayList<>();
        Collections.addAll(boyList, "范闲", "范建", "范统", "杜子腾", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰");
        Collections.addAll(girlList, "杜琦燕", "袁明媛", "李猜", "田蜜蜜");
        ArrayList<Integer> nums = new ArrayList<>();
        Collections.addAll(nums, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0);
        Collections.shuffle(nums);
        int n = nums.get(0);
        if (n == 1) {
            Collections.shuffle(boyList);
            System.out.println(boyList.get(0));
        } else {
            Collections.shuffle(girlList);
            System.out.println(girlList.get(0));
        }
    }

练习3:随机不重复

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

第一种方法

public class Test3 {
    public static void main(String[] args) {
       /* 班级里有5个学生
        要求:
        被点到的学生不会再被点到。
        但是如果班级中所有的学生都点完了,需要重新开启第二轮点名。*/


        //1.定义集合
        ArrayList<String> list1 = new ArrayList<>();
        //2.添加数据
        Collections.addAll(list1, "范闲", "范建", "范统", "杜子腾", "杜琦燕", "宋合泛", "侯笼藤", "朱益群", "朱穆朗玛峰", "袁明媛");
        //创建一个临时的集合,用来存已经被点到学生的名字
        ArrayList<String> list2 = new ArrayList<>();
        //外循环:表示轮数
        for (int i = 1; i <= 10; i++) {
            System.out.println("=========第" + i + "轮点名开始了======================");
            //3.获取集合的长度
            int count = list1.size();
            //4.随机点名
            Random r = new Random();
            //内循环:每一轮中随机循环抽取的过程
            for (int j = 0; j < count; j++) {
                int index = r.nextInt(list1.size());
                String name = list1.remove(index);
                list2.add(name);
                System.out.println(name);
            }
            //此时表示一轮点名结束
            //list1 空了 list2 10个学生的名字
            list1.addAll(list2);
            list2.clear();

        }
    }
}

第二种方法

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "范闲", "范建", "范统");
        // 思路一:讲这个集合复制一份,然后每次删除一个
        ArrayList<String> temp = new ArrayList<>(list);
        Collections.copy(temp, list);
        Random r = new Random();
        Scanner input = new Scanner(System.in);
        boolean index = true;
        while (index) {
            if (temp.isEmpty()) {
                // 将这个list的值重新复制到temp集合中
                temp.addAll(list);
                System.out.println("copy成功");
            }
            System.out.println("随机点到的是");
            int n = r.nextInt(temp.size());
            System.out.println(temp.get(n));
            temp.remove(n);
            System.out.println("请确认是否再次点名: true / false");
            index = input.nextBoolean();
        }
        input.close();
    }

练习4:集合的嵌套

需求:
定义一个Map集合,键用表示省份名称province,值表示市city,但是市会有多个。
添加完毕后,遍历结果格式如下:
江苏省 = 南京市,扬州市,苏州市,无锡市,常州市
湖北省 = 武汉市,孝感市,十堰市,宜昌市,鄂州市
河北省 = 石家庄市,唐山市,邢台市,保定市,张家口市

    public static void main(String[] args) {
        Map<String, ArrayList<String>> map = new HashMap<>();
        map.put("湖北省", new ArrayList<>(Arrays.asList("武汉市", "孝感市", "十堰市", "宜昌市", "鄂州市")));
        map.put("江苏省", new ArrayList<>(Arrays.asList("南京市", "扬州市", "苏州市", "无锡市", "常州市")));
        map.put("河北省", new ArrayList<>(Arrays.asList("石家庄市", "唐山市", "邢台市", "保定市", "张家口市")));
        map.put("河南省", new ArrayList<>(Arrays.asList("郑州市", "洛阳市", "开封市", "平顶山市", "驻马店市")));

        // 遍历map集合
        map.forEach((String t, ArrayList<String> u) -> System.out.println(t + ":" + u));
    }

练习 5: 斗地主发牌

按照斗地主的规则,完成洗牌发牌的动作。具体规则:

使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。按照斗地主的规则,完成洗牌发牌的动作。
具体规则:

使用 54 张牌打乱顺序, 三个玩家参与游戏,三人交替摸牌,每人 17 张牌,最后三张留作底牌。文章来源地址https://www.toymoban.com/news/detail-704853.html


    public static void main(String[] args) {
        // 创建牌
        String[] color = new String[] { "红桃", "方片", "黑桃", "梅花" };
        String[] points = new String[] { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "J", "2" };
        String[] joker = new String[] { "小王", "大王" };
        // 创建集合来存储牌,然后在打乱集合,在分发
        ArrayList<card> list = new ArrayList<>();
        for (int i = 0; i < points.length; i++) {
            for (int j = 0; j < color.length; j++) {
                list.add(new card(color[j], points[i]));
            }
        }
        list.add(new card("特殊", joker[0]));
        list.add(new card("特殊", joker[1]));
        // 打乱集合
        Collections.shuffle(list);
        // 分发数据
        ArrayList<card> player1 = new ArrayList<>();
        ArrayList<card> player2 = new ArrayList<>();
        ArrayList<card> player3 = new ArrayList<>();
        for (int i = 0; i < list.size() - 3;) {
            player1.add(list.get(i));
            i++;
            player2.add(list.get(i));
            i++;
            player3.add(list.get(i));
            i++;
        }
        System.out.println(list);
        System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println("底牌");
        System.out.println(list.get(list.size() - 3));
        System.out.println(list.get(list.size() - 2));
        System.out.println(list.get(list.size() - 1));
    }

到了这里,关于集合的练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】基础练习题

    1)从random库中选取相应的函数,用蒙特卡罗方法(统计实验方法)求解pi。 2)一个笼中共有鸡和兔15只,它们的脚一共有40只,问有多少只鸡?有多少只兔? 3) “猴子吃桃”问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下

    2024年02月07日
    浏览(45)
  • 记录-js基础练习题

    隔行换色(%): 简易计算器: 双色球随机数生成: 目标:生成一组(7个) 1-33之间的随机不重复的整数(1.生成一个1-33之间的整数。 2.生成7个–循环长度不固定用while循环。 3.要求不重复,补零操作) 鼠标滑过div显示隐藏: 条件判断if: 点击按钮,如果div显示,那么隐藏它

    2023年04月17日
    浏览(34)
  • python基础操作练习题

    使用版本:python 3.6.8 IDE:pycharm 这些练习题是在神经网络与深度学习课程上老师提供的,原因是有些同学没学过python,作为简单的练手习题。 题目都很简单,加上python本身也比较简单,有些题目的作答可以一行代码实现(虽然可读性就下降了)。 2.1 数位之和 编写程序,输入

    2024年02月08日
    浏览(43)
  • python练习题(基础篇1)

    本博文源于《程序设计竞赛入门》,旨在讲述第一章的题目,分别由选择题和编程题两部分组成,还是比较简单 1、在Python语言中,若多条语句写在一行,则语句之间以( )间隔 A, 空格 B. 冒号 C.逗号 D.分号 答案:D 2、Python语言不可用的注释符有 ( ) A.// B “”\\\"\\\"\\\" C # D ‘’’’’

    2023年04月27日
    浏览(65)
  • MySQL索引和视图基础练习题

    学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名Cno为主键 学生选课表:SC (Sno, Cno, Score) 学号,课程号,成绩Sno,Cno为主键 1.用SQL语句创建学生表Student,定义主键,姓名不能重名,性别只能输入男或女

    2024年01月17日
    浏览(43)
  • HarmonyOS云开发基础认证练习题

    HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 HarmonyOS云开发基础认证练习题 刚看到前几天有位朋友评论问有没有HarmonyOS云开发基础认证的题,粗略看了看感觉还行,老规矩1h2min速通。不过关于云开发华子只开放了基础认证,后续如果华子开放了高级和

    2024年02月09日
    浏览(60)
  • C#基础练习题,编程题汇总

    编程实现在一行内输入若干个整数(不超过30个),输出最大的一个整数。 样例如下: 输入(在一行内输入,空格分隔): 5 6 78 -89 0 23 100 4 6 输出: 100 C#具体设计: 1.先让用户输入一些整数, 2.再装其读入到字符串用, 3.用空格符来分割字符成,存成字符数组 4.用foreach语句

    2023年04月16日
    浏览(66)
  • 【技能树笔记】网络篇——练习题解析(五)

    目录 前言 一、应用层的作用 二、HTTP协议 三、FTP协议 四、DNS协议 五、DHCP协议 六、邮件协议 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授权⚠️。 🎁欢迎大

    2024年02月08日
    浏览(46)
  • 【技能树笔记】网络篇——练习题解析(四)

    目录 前言 一、传输层的作用 二、端口号的分类、作用 三、TCP协议的特点及应用 四、UDP协议的特点及应用 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授

    2024年02月08日
    浏览(40)
  • 【技能树笔记】网络篇——练习题解析(八)

    目录 前言 一、LAN技术 1.1 堆叠与集群 1.2 MSTP的特点 二、WAN技术 2.1 PPP链路建立 2.2 PPPoE 2.3 组播 2.3.1 组播的IP 2.3.2 组播分发树 2.3.3 组播协议 三、IPv6基础 3.1 IPv6地址 3.2 IPv6协议 3.3 IPv6过渡技术 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包