当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、自动点名器
  • 二、斗地主小游戏
    • 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,后续更新*/

在这里插入图片描述

        /**** 集合嵌套*键是字符串,值是单列集合*///没有特殊要求的情况下默认使用HashMapHashMap<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>>() {@Overridepublic 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>() {@Overridepublic 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.mrgr.cn/news/8200.html

相关文章:

  • Maven高级使用指南
  • 【冒泡排序算法】输入n个数进行排序
  • 搭建 PXE 远程安装服务器和设置 Kickstart 无人值守安装
  • XGBoost中正则化的9个超参数
  • K8S对接Ceph分部署存储
  • 关于Java中@Component的使用中出现@Autowired为NULL的问题
  • AI视频创作应用
  • Springboot-发送短信有哪些方法?
  • 常见的视频监控RTSP RTMP 流媒体协议及开发测试工具
  • 神经网络微调技术全解(01)-不同的微调方法如PEFT、SFT、LoRa、QLoRa等,旨在解决不同的问题和挑战
  • 使用命令模式实现撤销与重做功能的完整指南
  • 富格林:全面布局实现安全出金
  • 使用一致性哈希解决哈希分片负载均衡的扩展性问题
  • Java面向对象之类加载与static关键字
  • 【Python学习手册(第四版)】学习笔记20.2-迭代和解析(二)-迭代解析、迭代方法的计时比较、函数陷阱
  • 快速排序和归并排序模板(Java实现)
  • 工厂模式和策略模式区别以及使用
  • PCB设计(立创EDA)
  • vue的事件修饰符、数组变化侦测、计算属性、class绑定、style绑定
  • 认识HarmonyOS