斗地主练习(按照斗地主的规则,完成洗牌发牌的动作。)

2023-11-15

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

  • 使用54张牌;

  • 打乱顺序;

  • 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌;

  • 手中的牌按从小到大的顺序排列

    import java.util.ArrayList;
     import java.util.Collections;
     import java.util.LinkedHashMap;
     import java.util.Map;
    
    public class Doudizhu {
     public static void main(String[] args){
         //1.创建编号和牌对应的map集合,编号越大牌越大
         Map<Integer,String> map = new LinkedHashMap<Integer,String>();
         //2.创建牌的编号对应的ArrayList集合
         ArrayList<Integer> arraylist = new ArrayList<Integer>();
         //3.向Map,ArrayList中添加数据
           //编号
         int id = 1;
           //花色和数值
         String[] colors={"♠️","♥️","♣️","♦️"};
         String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
           //生成牌
         for (String num:numbers
              ) {
             for (String color:colors
                  ) {
                 String card = color+num;
                 map.put(id,card);
                 arraylist.add(id);
                 id++;
             }
         }
         map.put(id,"小王");
         arraylist.add(id);
         id++;
         map.put(id,"大王");
         arraylist.add(id);
    
     //4.洗牌
     Collections.shuffle(arraylist);
    
     //5.发牌
     ArrayList<Integer> person1Id = new ArrayList<Integer>();
     ArrayList<Integer> person2Id = new ArrayList<Integer>();
     ArrayList<Integer> person3Id = new ArrayList<Integer>();
     ArrayList<String> remaining = new ArrayList<String>();
      //给三个玩家轮流发牌
     for (int i=0;i<arraylist.size()-3;i++){
         person1Id.add(arraylist.get(i));
         i++;
         person2Id.add(arraylist.get(i));
         i++;
         person3Id.add(arraylist.get(i));
     }
     //剩下的三张底牌
     for (int j=arraylist.size()-3;j<arraylist.size();j++){
         //获取牌的编号
         int remainningId = arraylist.get(j);
         //根据牌的编号找到牌
         String remainingCard = map.get(remainningId);
         //将牌添加到ArrayList中
         remaining.add(remainingCard);
     }
     System.out.println("底牌:"+remaining);
    
     //6.给三个玩家手里的牌排序
     Collections.sort(person1Id);
     Collections.sort(person2Id);
     Collections.sort(person3Id);
    
    
     ArrayList<String> person1Card = new ArrayList<String>();
     ArrayList<String> person2Card = new ArrayList<String>();
     ArrayList<String> person3Card = new ArrayList<String>();
     //7.看牌
     //根据牌的编号从Map集合中获取他的牌
     for (int i:person1Id
          ) {
         String value = map.get(i);
         person1Card.add(value);
     }
     for (int i:person2Id
             ) {
         String value = map.get(i);
         person2Card.add(value);
     }
     for (int i:person3Id
             ) {
         String value = map.get(i);
         person3Card.add(value);
     }
     System.out.println(person1Card);
     System.out.println(person2Card);
     System.out.println(person3Card);
     }
    }
    

结果为:在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

斗地主练习(按照斗地主的规则,完成洗牌发牌的动作。) 的相关文章

  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Jframe 内有 2 个 Jdialogs 的 setModal 问题

    当我设置第一个选项时 我遇到了问题JDialog模态 第二个非模态 这是我正在尝试实现的功能 单击 测试对话框 按钮 一个JDialog有名字自定义对话框 主要的将会打开 如果单击 是 选项自定义对话框主 其他JDialog named 自
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp

随机推荐

  • R语言实用案例分析-1

    在日常生活和实际应用当中 我们经常会用到统计方面的知识 比如求最大值 求平均值等等 R语言是一门统计学语言 他可以方便的完成统计相关的计算 下面我们就来看一个相关案例 1 背景 最近西安交大大数据专业二班 开设了Java和大数据技术课程 班
  • matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

    今天某同学让我帮他看看matlab代码出了什么问题 首先运行代码 出现了第一个问题 这个GetSal函数是一个文件外的自定义函数 一看运行的当前目录和这个函数所在的目录不在同一个目录下 在代码里加入addpath 自定义函数所在目录 即可
  • 网络精通-组播

    400 组播 一次发送一组人接收 组播的应用场景 广播电视 音频会议 电视直播 401 PIM 组播路由协议 运行在中间路由器上 帮助路由器选择最短路径到达终端 402 IGPM 运行在最后一跳路由器和终端上面 用来通知路由器下面是否有终端
  • 微信小程序npm项目构建和使用(按照步奏操作)

    1 微信开发者工具里面新建目录miniprogram目录 文件目录名和红色框名一致 然后在miniprogram目录下新建node modules目录 2 WIN R打开运行输入CMD运行黑窗口 cd到你的项目miniprogram目录 错
  • drop table if exists 多张表_mysql实验--DROP 大表时的注意事项

    概述 我们很多时候都会去drop一些大表 特别是生产环境做操作时 这里主要提一些注意事项 仅供参考 01 相关语法 1 删表 DROP TABLE SyntaxDROP TEMPORARY TABLE IF EXISTS tbl name
  • Prometheus + Grafana 监控Docker

    Prometheus Grafana 监控Docker cAdvisor Container Advisor 用于收集正在运行的容器资源使用和性能信息 k8s中kubelet自带cadvisor监控所有节点 参考 https github
  • SQL注入(一)—— sql手动注入实操

    SQL SQL注入 sql 注入的核心 SQL 手注的一般流程 判断注入点 第一步 判断字段数 第二步 判断回显点 第三步 查询相关内容 第四步 判断库名 判断表名 判断列名 查询具体信息 总结 SQL注入 SQL注入攻击是目前web应用网
  • 【语义】如何使用PointNet训练点云数据和点云分割(初探)

    大家好 今天给大家介绍下cvpr2017 一篇文章Pointnet 语义分割 该网络基于tensorflow 写的 非常轻巧方便 但是文章和代码有一定出入 在训练过程中出现过拟合现象 大概训练了10个小时多 1 需要准备的东东 1 Ubun
  • 基于STM32F103RB的模拟液位检测告警系统(已实现)

    这次先看一下老朋友STM32 有关Zigbee的内容 Z stack协议栈和基于Zigbee的环境温湿度 烟雾传感器的环境监测系统 等有时间再更 基于STM32的模拟液位检测告警系统 记得好像是某一届蓝桥杯省赛题 基于STM32告警系统介绍
  • GTSAM曲线拟合与自定义因子

    GTSAM曲线拟合与自定义因子 在 视觉SLAM十四讲 中 第六章讲了最小二乘与曲线拟合 采用了三种方法 手动推导高斯牛顿方法 即自己构造正规方程 J T J x
  • 65nm芯片流片费用_研制自主可控芯片,他们凭实力在国赛中斩金!

    我们终于成功了 近日 在上海举办的 华为杯 第三届中国研究生创 芯 大赛上 来自国防科大电子科学学院的研究生张宇飞 黄力行 张诗清三人小组凭借作品 基于忆阻器的低功耗神经形态视觉处理器 获得全国一等奖 该作品是本次大赛唯一的 忆阻器 类脑芯
  • 电容和频率的关系_交流纯电容电路中电容的容抗、容量和频率以及电压与电流的关系...

    纯电容电路中各量之间的关系 电容容抗 如果不考虑电容器本身存在的泄露电阻影响 可以认为电容器是一个纯电容负载 当电容器两端接在交流电压上 在电压由零增至最大时 对电容器充电 有一充电电流 在电压由最大值降低至零时 电容器放电 有一放电电流
  • 京东商品评论分析

    文章目录 京东商品评论取 一 研究背景 二 爬取数据 2 1 完整代码 2 2 使用说明 三 词云分析 四 情感分析 转自艾派森博客 基于Python爬虫 词云图 情感分析对某东上完美日记的用户评论分析 该项目来源于 腾讯云 Cloud S
  • uses sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library [:flutter_inappwebvi

    0 简述 1 报错信息 2 问题原因 3 解决方案 简述 今天用到flutter的一个第三方webview框架 但是无法正常编译 编译了两次都失败了 报错信息 uses sdk minSdkVersion 16 cannot be smal
  • Java面试题第八天

    一 Java面试题第八天 1 如何实现对象克隆 浅克隆 浅克隆就是我们可以通过实现Cloneable接口 重写clone 这种方式就叫浅克隆 浅克隆 引用类型的属性 是指向同一个内存地址 但是如果引用类型的属性也进行浅克隆就是深克隆 深克隆
  • 空调工作原理

    1 变频空调 工作原理 变频 采用了比较先进的技术 启动时电压较小 可在低电压和低温度条件下启动 这对于某些地区由于电压不稳定或冬天室内温度较低而空调难以启动的情况 有一定的改善作用 由于实现了压缩机的无级变速 它也可以适应更大面积的制冷制
  • 8、es---深入聚合数据分析

    一 bucket与metric 1 bucket相当于mysql的group by 2 metric 对一个数据分组执行的统计 比如说求平均值 求最大值 求最小值 二 实战 1 例1 查询参数及结果说明 GET tvs sales sear
  • 欧拉降幂(广义欧拉降幂)

    第一个要求a和p互质 第二个和第三个是广义欧拉降幂 不要求a和p互质 但要求b和的大小关系 A K A K m m mod m K gt m 1 证明如下 1 若 A m 1 根据欧拉定理 A m 1 mod m 即可轻易得证 2 若 A
  • Java基础之比较器

    文章目录 一 背景 二 Comparable 自然排序 三 Comparator 定制排序 一 背景 Java中的对象 正常情况下 只能进行比较 或 不能使用 gt 或 lt 的 但是在开发场景中 我们需要对多个对象进行排序 言外之意 就需
  • 斗地主练习(按照斗地主的规则,完成洗牌发牌的动作。)

    按照斗地主的规则 完成洗牌发牌的动作 具体规则 使用54张牌 打乱顺序 三个玩家参与游戏 三人交替摸牌 每人17张牌 最后三张留作底牌 手中的牌按从小到大的顺序排列 import java util ArrayList import jav