Java学习_17_集合综合练习(待更新)

news2024/11/24 9:14:02

文章目录

  • 前言
  • 一、自动点名器
  • 二、斗地主小游戏
    • 1、准备牌
    • 2、洗牌
    • 3、发牌
    • 4、理牌
  • 总结


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao

部分内容因没有学到,等待后续更新


一、自动点名器

在这里插入图片描述

        /***
         * 点名器1,N个学生随机点名
         */
        ArrayList<Student> arrayList = new ArrayList<>();

        Student student_1 = new Student("aaa", "male", 16);
        Student student_2 = new Student("bbb", "female", 16);
        Student student_3 = new Student("ccc", "female", 16);
        Student student_4 = new Student("ddd", "male", 16);

        Collections.addAll(arrayList, student_1, student_2, student_3, student_4);

        System.out.println(arrayList);

        //随机数法
        Random rd = new Random();

        System.out.println(arrayList.get(rd.nextInt(arrayList.size())).getName());

        //打乱法
        Collections.shuffle(arrayList);
        System.out.println(arrayList.get(0).getName());

在这里插入图片描述

       /***
         * 点名器2,N个学生,70%点名男生,30%点名女生
         */
        ArrayList<Student> arrayList = new ArrayList<>();

        Student student_1 = new Student("aaa", "male", 16);
        Student student_2 = new Student("bbb", "female", 16);
        Student student_3 = new Student("ccc", "female", 16);
        Student student_4 = new Student("ddd", "male", 16);

        Collections.addAll(arrayList, student_1, student_2, student_3, student_4);

        System.out.println(arrayList);

        //先将男女分开
        ArrayList<Student> male_Student = new ArrayList<>();
        ArrayList<Student> female_Student = new ArrayList<>();

        for (Student student : arrayList) {
            if(student.getGender().equals("male")) {
                male_Student.add(student);
            }else {
                female_Student.add(student);
            }
        }

        //创建概率数组并打乱
        ArrayList<Integer> probability = new ArrayList<>();
        Collections.addAll(probability, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1);
        Collections.shuffle(probability);

        System.out.println(probability);

        //抽取学生
        Random rd = new Random();

        int x = probability.get(rd.nextInt(probability.size()));

        if (x == 0) {
            System.out.println(male_Student.get(rd.nextInt(male_Student.size())).getName());
        }else {
            System.out.println(female_Student.get(rd.nextInt(female_Student.size())).getName());
        }

在这里插入图片描述

       /***
         * 点名器3,N个学生,都会点,但是被点到后不会再点了
         * 所有人点到后重新开始第二轮
         */
        ArrayList<Student> arrayList = new ArrayList<>();

        Student student_1 = new Student("aaa", "male", 16);
        Student student_2 = new Student("bbb", "female", 16);
        Student student_3 = new Student("ccc", "female", 16);
        Student student_4 = new Student("ddd", "male", 16);

        Collections.addAll(arrayList, student_1, student_2, student_3, student_4);

        System.out.println(arrayList);


        //实际上直接打乱然后顺序点就行了
        //但是此处是想练习集合删除

        //点名十轮
        for (int i = 0; i < 10; i++) {
            //创建临时集合装被点过的学生
            ArrayList<Student> arrayList1 = new ArrayList<>();

            while (!arrayList.isEmpty()){
                Random rd = new Random();
                int x = rd.nextInt(arrayList.size());
                System.out.println(arrayList.get(x).getName());
                arrayList1.add(arrayList.get(x));
                arrayList.remove(x);
            }

            arrayList.addAll(arrayList1);
        }

在这里插入图片描述

        /***
         * 点名器4,后续更新
         */

在这里插入图片描述

        /***
         * 点名器5,后续更新
         */

在这里插入图片描述

        /***
         * 集合嵌套
         *键是字符串,值是单列集合
         */

        //没有特殊要求的情况下默认使用HashMap
        HashMap<String , ArrayList<String>> hashMap = new HashMap<>();

        ArrayList<String> city1 = new ArrayList<>();
        Collections.addAll(city1, "南京市", "扬州市", "苏州市");
        ArrayList<String> city2 = new ArrayList<>();
        Collections.addAll(city2, "武汉市", "孝感市", "十堰市");
        ArrayList<String> city3 = new ArrayList<>();
        Collections.addAll(city3, "石家庄市", "唐山市", "保定市");

        hashMap.put("江苏省", city1);
        hashMap.put("湖北省", city1);
        hashMap.put("河北省", city1);

        hashMap.forEach(new BiConsumer<String, ArrayList<String>>() {
            @Override
            public void accept(String s, ArrayList<String> strings) {
                System.out.print(s + " = ");
                int i = 0;
                for (String string : strings) {
                    System.out.print(string);
                    if (i != strings.size() - 1) {
                        System.out.print(",");
                        i ++;
                    }
                }
                System.out.println();
            }
        });

二、斗地主小游戏

1、准备牌

很明显,一张牌有两个属性,花色和数字
在游戏开始时准备一副牌,并且不会随着开始新的一轮游戏而新创建一副牌,需要使用静态代码块

    static {

        /**
         * 准备牌
         *"♦","♣","♥","♠"
         *"3","4","5","6","7","8","9","10","J","Q","K","A"
         */

        ArrayList<String> colorSet = new ArrayList<>();
        ArrayList<String> pointSet = new ArrayList<>();

        //添加花色及点数
        Collections.addAll(colorSet, "♦","♣","♥","♠");
        Collections.addAll(pointSet, "3","4","5","6","7","8","9","10","J","Q","K","A","2");


        for (String color : colorSet) {
            for (String point: pointSet) {
                cardSet.add(new Card(color, point));
            }
        }
        //加入大小王
        cardSet.add(new Card("Black", "Joker"));
        cardSet.add(new Card("Red", "Joker"));
    }

2、洗牌

        //洗牌
        Collections.shuffle(cardSet);

3、发牌

        //发牌
        //创建玩家牌库
        ArrayList<Card> lord = new ArrayList<>();
        ArrayList<Card> player1 = new ArrayList<>();
        ArrayList<Card> player2 = new ArrayList<>();
        ArrayList<Card> player3 = new ArrayList<>();

        //给玩家发牌
        CardGet(lord, player1, player2, player3);

    public static void CardGet(ArrayList<Card> lord, ArrayList<Card> player1, ArrayList<Card> player2, ArrayList<Card> player3) {

        int i = 0;
        //发牌
        for (int j = 0; j < 3; j++) {
            lord.add(cardSet.get(i++));
            player1.add(cardSet.get(i++));
            player2.add(cardSet.get(i++));
            player3.add(cardSet.get(i++));
        }
        while (i < cardSet.size()) {
            player1.add(cardSet.get(i++));
            player2.add(cardSet.get(i++));
            player3.add(cardSet.get(i++));
        }

4、理牌

在这里插入图片描述
在这里插入图片描述

    //理牌
    public static void CardSort(ArrayList<Card> card) {

        //添加花色及点数
        ArrayList<String> colorSet = new ArrayList<>();
        ArrayList<String> pointSet = new ArrayList<>();

        Collections.addAll(colorSet, "♦","♣","♥","♠","Red","Black");
        Collections.addAll(pointSet, "3","4","5","6","7","8","9","10","J","Q","K","A","2","Joker");

        card.sort(new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                int i = pointSet.indexOf(o1.getPoint()) - pointSet.indexOf(o2.getPoint());
                i = i == 0 ? colorSet.indexOf(o1.getPoint()) - colorSet.indexOf(o2.getPoint()) : i;
                return i;
            }
        });
    }

各类定义类型推荐
在这里插入图片描述
提示:会频繁出现集合嵌套集合的情况
在这里插入图片描述
明显是布尔类型
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意此时Card类继承自jLabel和MouseListener。

在这里插入图片描述
在这里插入图片描述

后续代码等学完多线程后更新

总结

基本都是集合的运用,包括集合的排序,比较器的书写规则,lambda表达式的熟悉。总体来说都是熟练了就很简单,纯工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具[工具版]

Edge-TTS&#xff0c;由微软推出的这款免费、开源的AI工具&#xff0c;为用户带来了丰富多样的中文语音体验。它不仅支持多种中文语音语色&#xff0c;还能实现流畅自然的语音合成。Edge-TTS凭借其高度可定制化的特点&#xff0c;广泛应用于智能助手、语音播报、教育培训等领域…

商业软件许可证介绍|简单原理探究

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 引入话题 既然是商业软件&#xff0c;涉及到商业&#xff0c;那目的就是赚钱。 就拿IDEA举例&#x…

Linux系统中的常见操作命令

目录 命令总结&#xff1a; 一、目录处理命令 二、文件处理命令 三、权限管理命令 四、其它实用命令 命令总结&#xff1a; &#xff08;目录&#xff09; ls [参数] 目录、&#xff08;查看目录&#xff09;pwd、&#xff08;切换目录&#xff09;cd [目录路径]、&…

4.1栈和队列基本概念+经典OJ题

本篇博客来梳理栈和队列基本概念以及一道经典OJ题&#xff0c;题目已插入超链接&#xff0c;点击即可跳转~ 一、栈的相关概念 1&#xff0e;栈 一种特殊的线性表&#xff0c;只允许在固定的一端插入和删除元素&#xff0c;栈中的数据遵循后进先出原则 &#xff08;1&#x…

Pytorch添加自定义算子之(12)-开闭原则设计tensorrt和onnxruntime推理语义分割模型

一、开闭原则 开闭原则是SOLID原则中的一个,指的是尽量使用开放扩展,关闭修改的设计原则。 在C++中如何使用开闭原则导出动态库,可以按照以下步骤进行: 定义抽象基类:定义动态库中的抽象基类,该基类应该封装可扩展的接口。 实现派生类:实现基类的派生类,这些派生类将封…

Vue 导航条+滑块效果

目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…

继承(下)【C++】

文章目录 子类继承父类之后&#xff0c;子类的默认成员函数的变化构造函数编译器自动生成的构造函数程序员手动写的构造函数 拷贝构造编译器自动生成的拷贝构造函数程序员手动写的拷贝构造函数 赋值重载编译器自动生成的赋值重载程序员手动写的赋值重载 析构函数 继承与友元菱形…

vm安装mac虚拟机

vm安装mac虚拟机 简介实操 简介 教程&#xff1a;完全面向萌新的黑苹果安装教学&#xff1a;黑苹果安装从入门到入白&#xff0c;借助VMware虚拟机给实体机硬盘按照macOS黑苹果系统 实操 下载unlocker&#xff0c;之后运行vm就可以新建mac虚拟机了 新建一个没有选择镜像的…

【Electron】桌面应用开发快速入门到打包Windows应用程序

electron 实现桌面应用开发快速入门到打包Windows应用程序 一、基本介绍 ‌‌Electron 是一个使用‌ JavaScript、‌HTML 和‌ CSS 构建桌面应用程序的框架。它通过将‌Chromium和‌Node.js嵌入到其二进制文件中&#xff0c;允许开发者使用JavaScript代码库创建跨平台的桌面应…

汽车冷却液温度传感器

1、冷却液温度传感器的功能 发动机冷却液温度传感器&#xff0c;也称为ECT&#xff0c;是帮助保护发动机&#xff0c;提高发动机工作效率以及帮助发动机稳定运行的非常重要的传感器之一。 发动机冷却液温度 &#xff08;ECT&#xff09; 传感器用于测量发动机的冷却液温度&…

IO进程线程 0822作业

作业 使用write和read完成文件的拷贝。 将1.txt文件内容拷贝到2.txt中 #include <myhead.h> int main(int argc, const char *argv[]) {if(argc ! 3){printf("外部传参错误\n");return -1;}int fd1;fd1 open(argv[1],O_RDONLY);if(fd1 -1){perror("op…

Java基础——自学习使用(static关键字)

一、static关键字是什么&#xff1f; static修饰的代码属于类&#xff0c;定义的变量存储在方法区的静态常量池当中 二、static可以修饰什么 1.static修饰变量 static修饰的变量叫做类变量&#xff0c;被所有该类产生的对象所共享&#xff0c;存储在方法区的静态常量池中 2…

Java巅峰之路---进阶篇---面向对象(二)

Java巅峰之路---进阶篇---面向对象&#xff08;二&#xff09; 多态介绍多态调用成员的特点多态的优势、弊端以及解决方案综合练习 包和final包的介绍使用其他类的规则&#xff08;导包&#xff09;final关键字final的用途常量 权限修饰符和代码块权限修饰符的介绍四个权限修饰…

给跨行或同行转岗产品经理的几点建议

转岗不但要勇气还需要方法。现在&#xff0c;从其他职位转岗成为产品经理并不罕见。交互设计师&#xff0c;UI设计师&#xff0c;测试&#xff0c;开发&#xff0c;运营和用户研究都有大量转岗到产品经理的事例&#xff0c;甚至还有客户服务&#xff0c;销售转岗产品的。 一方面…

关于智能编码助手【通义灵码】,开发者们这么说...

自通义灵码发布以来&#xff0c;不停地有开发者朋友为我们送上通义灵码的测评反馈。 关于通义灵码&#xff0c;开发者这样说 墨问西东 CEO 池建强&墨问研发团队 “通义灵码有一个强大的功能就是企业知识库检索增强&#xff0c;我们只需要上传团队的代码规范&#xff0c;…

TS之 对象可能为“未定义”,不能将类型“ XXXX | undefined “分配给类型{ xxxx }

1、Vue3 结合 TS 获取 HTMLElement 时报“未定义” 简单粗暴的处理就是在后面加一个【 ! 】感叹号&#xff0c;告诉 TS 引擎此元素存在&#xff0c;有点类似于 as xxx 的意思&#xff01; 2、使用声明的可选属性时&#xff0c;报“未定义” 使用 TS 我们经常会声明一些泛型&a…

AI学习记录 - 如何快速构造一个简单的token词汇表

创作不易&#xff0c;有用的话点个赞 先直接贴代码&#xff0c;我们再慢慢分析&#xff0c;代码来自openai的图像分类模型的一小段 def bytes_to_unicode():"""Returns list of utf-8 byte and a corresponding list of unicode strings.The reversible bpe c…

clip-path实现图片边角的裁剪

img {clip-path: polygon(0 7px,7px 0,calc(100% - 20px) 0,100% 20px,100% 100%,16px 100%,0 calc(100% - 16px));}每一个逗号隔开的就是路径坐标 左上角的两个点 0 7px &#xff0c;7px 0 右上角 calc(100% - 20px) 0,100% 20px 相当于通过这些点练成的线的圈起来的部分就是剩…

SpringBoot集成AI服务

背景 在当今这个日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;正以雷霆万钧之势席卷全球&#xff0c;从学术研究到商业应用&#xff0c;从日常生活到社会管理&#xff0c;无一不在经历着AI革命的洗礼。AI技术的飞速发展&#xff0c;不仅改变了我们的生活方式&…

数据库E-R 图

基础概念 E-R图 (Entity Relationship Diagram)&#xff0c;也称实体关系图。提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型。其中各个实体&#xff08;数据模型中的对象&#xff09;可以有属性。 图形含义 1、实体 实体就是现实中存在的东…