洗牌 发牌 以及玩家拿到牌之后整理牌的实现思路

题目:洗牌 发牌 以及玩家拿到牌之后整理牌的实现思路

实现思路:

方式1:用数组实现

import java.util.Arrays;
public class demo14 {public static void main(String[] args) {//所有的牌面花色char[] flags= {'♥','♠','♦','♣'};//所有的牌面数字String[] numbers= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//步骤1:初始化所有的牌面(排列组合)int index = 0;String[] pokers = new String[52];for (char f : flags) {for (String n : numbers) {pokers[index++] = f + n;}}System.out.println("52张牌面完成初始化: " + Arrays.toString(pokers));//步骤2:洗牌10次for (int counter = 1; counter <= 10; counter++) {//乱序算法for (int k = pokers.length - 1; k > 0; k--) {int randIndex = (int) (Math.random() * k );String temp = pokers[k];pokers[k] = pokers [randIndex];pokers[randIndex] = temp;}}System.out.println("52张牌10次洗牌后:" + Arrays.toString(pokers));//步骤3:发牌String[][] players = new String[4][13];for (int i = 0,n = 0; i < players[0].length; i++) {for (int k = 0; k < players.length; k++) {players[k][i] = pokers[n++];}}System.out.println("依次发牌后: ");for (String[] pl : players) {System.out.println("玩家:" + Arrays.toString(pl));}System.out.println();//步骤4:整理牌面(牌面排序)String[]array = { "A","J","K","Q"};//循环:每次拿出一个玩家的所有牌,整理排序for (String[] pl : players) {//冒泡排序for (int i = 0, n = pl.length; i < n - 1; i++) {for (int k = 0; k < n - 1 - i; k++) {//获取相邻元素的牌面值// ♥10 = 10 ♥A = A ♥K =kString s1 = pl[k].substring(1);String s2 = pl[k + 1].substring(1);//将截取出的牌面值,保存至临时数组String[]tempArray = { s1,s2 };//遍历临时数组,将A=1,J=11,Q=12,K=13for (int x = 0; x < tempArray . length; x++) {//检查(搜索)本次的牌面值,是否是"A,3,k,Q"中的任意一个int searchIndex = Arrays.binarySearch(array,tempArray[x]);if ( searchIndex >= 0) {switch (tempArray[x ]) {case "A":tempArray[x] = "1";break;case "J":tempArray[x] = "11";break;case "Q":tempArray[x] = "12";break;case "K" :tempArray[x]= "13";break;}}}//tempArray = { "A","J”};//tempArray = { "1","11”};//将字符串的牌面值转换成纯数字int n1 = Integer.parseInt( tempArray[0]);int n2 = Integer.parseInt(tempArray[1]);//根据比较结果,交换两张牌if (n1 > n2) {String temp = pl[k];pl[k] = pl[k + 1];pl[k + 1] = temp;}}}}System.out.println();System.out.println("玩家整牌后:");for (String[] pl : players) {System.out.println("玩家:" + Arrays.toString(pl));}}
}

运行结果:

52张牌面完成初始化: [♥A, ♥2, ♥3, ♥4, ♥5, ♥6, ♥7, ♥8, ♥9, ♥10, ♥J, ♥Q, ♥K, ♠A, ♠2, ♠3, ♠4, ♠5, ♠6, ♠7, ♠8, ♠9, ♠10, ♠J, ♠Q, ♠K, ♦A, ♦2, ♦3, ♦4, ♦5, ♦6, ♦7, ♦8, ♦9, ♦10, ♦J, ♦Q, ♦K, ♣A, ♣2, ♣3, ♣4, ♣5, ♣6, ♣7, ♣8, ♣9, ♣10, ♣J, ♣Q, ♣K]
52张牌10次洗牌后:[♥6, ♣2, ♦3, ♣3, ♠2, ♥A, ♠9, ♥8, ♠K, ♦2, ♠10, ♣10, ♠6, ♥Q, ♥5, ♥4, ♥7, ♠5, ♦7, ♠Q, ♣K, ♦A, ♠3, ♣A, ♦6, ♥2, ♠J, ♥10, ♦9, ♥J, ♣7, ♠A, ♣6, ♣5, ♦5, ♣J, ♥K, ♥9, ♦Q, ♣8, ♦4, ♦8, ♠7, ♦K, ♠4, ♠8, ♣4, ♣9, ♦10, ♣Q, ♥3, ♦J]
依次发牌后: 
玩家:[♥6, ♠2, ♠K, ♠6, ♥7, ♣K, ♦6, ♦9, ♣6, ♥K, ♦4, ♠4, ♦10]
玩家:[♣2, ♥A, ♦2, ♥Q, ♠5, ♦A, ♥2, ♥J, ♣5, ♥9, ♦8, ♠8, ♣Q]
玩家:[♦3, ♠9, ♠10, ♥5, ♦7, ♠3, ♠J, ♣7, ♦5, ♦Q, ♠7, ♣4, ♥3]
玩家:[♣3, ♥8, ♣10, ♥4, ♠Q, ♣A, ♥10, ♠A, ♣J, ♣8, ♦K, ♣9, ♦J]玩家整牌后:
玩家:[♠2, ♦4, ♠4, ♥6, ♠6, ♦6, ♣6, ♥7, ♦9, ♦10, ♠K, ♣K, ♥K]
玩家:[♥A, ♦A, ♣2, ♦2, ♥2, ♠5, ♣5, ♦8, ♠8, ♥9, ♥J, ♥Q, ♣Q]
玩家:[♦3, ♠3, ♥3, ♣4, ♥5, ♦5, ♦7, ♣7, ♠7, ♠9, ♠10, ♠J, ♦Q]
玩家:[♣A, ♠A, ♣3, ♥4, ♥8, ♣8, ♣9, ♣10, ♥10, ♣J, ♦J, ♠Q, ♦K]

方式2:用集合实现

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.TreeSet;public class demo15 {public static void main(String[] args) {// 所有的牌面花色char[] flags = {'♥','♠','♦','♣'};// 所有的牌面数字String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};// 步聚1: 初始化所有的牌面(排列组合)ArrayList<String> pokers = new ArrayList<String>();for(char f : flags) {for(String n : numbers) {pokers.add(f+n);}}System.out.println("52张牌面完成初始化:" + pokers);// 步骤2: 洗牌for(int i = 0;i < 10;i++) {Collections.shuffle(pokers);}System.out.println("52张牌面完成10次洗牌:" + pokers);// 步骤3: 发牌ArrayList<TreeSet<String>> playerList = new ArrayList<TreeSet<String>>();for(int i = 0;i<4;i++) {//玩家XplayerList.add(new TreeSet<String>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {// ♠10 = "10" ♠5 = "5"String s1 = o1.substring(1);String s2 = o2.substring(1);String[] tempArray = { s1, s2 };for (int x = 0; x < tempArray.length; x++) {switch (tempArray[x]) {case"A":tempArray[x] ="1";break;case "J":tempArray[x] ="11";break;case "Q":tempArray[x] ="12";break;case "K":tempArray[x] ="13";break;}}//转换牌面数值为整数int n1 = Integer.parseInt(tempArray[0]);int n2 = Integer.parseInt(tempArray[1]);//牌面数值如果相等,则比较花色+牌面数值if(n1 == n2) {return o1.compareTo(o2);}//比较牌面数值return n1 - n2;}}));}for (int i = 0; i < pokers.size(); i++) {//玩家依次发牌playerList.get(i % 4).add(pokers.get(i));}//整牌for (TreeSet<String> player : playerList) {System.out.println(player);}}
}

运行结果:

52张牌面完成初始化:[♥A, ♥2, ♥3, ♥4, ♥5, ♥6, ♥7, ♥8, ♥9, ♥10, ♥J, ♥Q, ♥K, ♠A, ♠2, ♠3, ♠4, ♠5, ♠6, ♠7, ♠8, ♠9, ♠10, ♠J, ♠Q, ♠K, ♦A, ♦2, ♦3, ♦4, ♦5, ♦6, ♦7, ♦8, ♦9, ♦10, ♦J, ♦Q, ♦K, ♣A, ♣2, ♣3, ♣4, ♣5, ♣6, ♣7, ♣8, ♣9, ♣10, ♣J, ♣Q, ♣K]
52张牌面完成10次洗牌:[♦K, ♠5, ♦10, ♠6, ♦6, ♥5, ♥3, ♥7, ♠8, ♥J, ♠2, ♥4, ♥Q, ♥10, ♥8, ♦3, ♣K, ♠7, ♥9, ♠9, ♣2, ♥2, ♠3, ♣J, ♣5, ♠10, ♠K, ♣3, ♣6, ♣Q, ♣8, ♦8, ♦5, ♣A, ♦Q, ♦A, ♣9, ♠4, ♠J, ♥A, ♦4, ♠Q, ♣7, ♠A, ♦9, ♥6, ♣4, ♦7, ♦J, ♥K, ♦2, ♣10]
[♣2, ♦4, ♣5, ♦5, ♣6, ♦6, ♠8, ♣9, ♦9, ♦J, ♥Q, ♣K, ♦K]
[♣A, ♥2, ♠4, ♠5, ♥5, ♥6, ♠7, ♠10, ♥10, ♥J, ♠Q, ♣Q, ♥K]
[♠2, ♦2, ♠3, ♥3, ♣4, ♣7, ♣8, ♥8, ♥9, ♦10, ♠J, ♦Q, ♠K]
[♠A, ♥A, ♦A, ♣3, ♦3, ♥4, ♠6, ♥7, ♦7, ♦8, ♠9, ♣10, ♣J]

 

 

 

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

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

相关文章

bert预训练模型下载

查看 bert 模型所支持的预训练模型有哪些 from transformers import BERT_PRETRAINED_MODEL_ARCHIVE_LIST print(BERT_PRETRAINED_MODEL_ARCHIVE_LIST) 运行结果会吧所有支持的模型打印出来&#xff0c;比如 bert-base-chinese 一般下载模型我们搜索到的都是去 https://hugg…

详解顺序结构双指针处理算法

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

每日一题 力扣365 水壶问题

365. 水壶问题 题目描述&#xff1a; 有两个水壶&#xff0c;容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。 如果可以得到 targetCapacity 升水&#xff0c;最后请用以上水壶中的一或两个来盛放取…

MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)

CSDN 成就一亿技术人&#xff01; 今天讲讲再MySQL中使用percona-xtrabackup这个开源工具来实现在线备份。 CSDN 成就一亿技术人&#xff01; 目录 介绍percona-xtrabackup 安装Percona 完整备份 备份流程 恢复流程 1.模拟文件损坏 2.滚回日志 3.恢复数据目录 4.授权…

可解释性人工智能(XAI)概述

文章目录 每日一句正能量前言可解释性人工智能&#xff08;XAI&#xff09;定义研究的作用应用领域XAI的目标后记 每日一句正能量 一个人若想拥有聪明才智&#xff0c;便需要不断地学习积累。 前言 人工智能&#xff08;AI&#xff09;的发展速度迅猛&#xff0c;并在许多领域…

【JavaScript】ECMA6Script es6

文章目录 一、 es6的介绍二、 es6的变量和模板字符串2.1 let 与 var2.2 const 与 var2.3 模板字符串 三、 es6的解构表达式四、 es6的箭头函数4.1 声明和特点4.2 实践和应用场景4.3 rest和spread 五、es6的对象创建和拷贝5.1 对象创建的语法糖5.2 对象的深拷贝和浅拷贝 六、es6…

Qt扩展-QXlsx读写Excel配置使用

QXlsx读写Excel配置使用 一、概述1. 功能概述2. 其他维护 二、安装1. 下载源码2. 配置项目3. 测试代码4. 运行结果 一、概述 项目介绍&#xff1a;https://qtexcel.github.io/QXlsx/Example.html GitHub&#xff1a;https://github.com/QtExcel/QXlsx/tree/master QXlsx 是一个…

2024年最适合开Palworld的游戏服务器

如果要开Palworld服务器&#xff0c;当然要选大内存的服务器 在雨云&#xff0c;你不仅可以 链接&#xff1a;雨云 - 新一代云服务提供商欢迎来到以用户体验为优先的雨云&#xff0c;我们提供稳定高速的国际虚拟主机&#xff0c;云服务器产品&#xff0c;强大的功能&#xff…

requests库的使用

Requests 是一个优雅而简单的 Python HTTP 库&#xff0c;其实 Python 内置了用于访问网络的资源模块&#xff0c;比如urllib&#xff0c;但是它远不如 Requests 简单优雅&#xff0c;而且缺少了许多实用功能。所以&#xff0c;更推荐掌握 Requests 做接口测试&#xff0c;这也…

不学前沿技术与朽木浮草何异 ?Java21新特性

不学前沿技术与朽木浮草何异 &#xff1f;Java21新特性 文章目录 不学前沿技术与朽木浮草何异 &#xff1f;Java21新特性JEP 430&#xff1a;字符串模板&#xff08;预览&#xff09;JEP431&#xff1a;序列化集合JEP 439&#xff1a;分代 ZGCJEP 440&#xff1a;记录模式JEP 4…

自定义包的设计与实现

这是一个 CPacket 类&#xff0c;用于解析包含固定格式的数据。该类的成员变量包括固定包头 sHead、包长度 nLength、控制命令 sCmd、包数据 strData 和和校验 sSum。 构造函数&#xff1a; CPacket()&#xff1a;默认构造函数&#xff0c;初始化成员变量。 CPacket(const B…

WindowsOS

C:. ├─PerfLogs&#xff0c;系统日志文件夹 ├─Program Files&#xff0c;程序文件 ├─Program Files&#xff08;x86&#xff09;&#xff0c;程序文件&#xff08;x86&#xff09; ├─ProgramData&#xff0c;程序数据 ├─Windows&#xff0c;Windows系统文件夹 └─Us…

数据结构排序小结

排序类型小结 &#x1f4a6; 插入排序直接插入排序希尔排序 &#x1f4a6; 选择排序直接选择排序堆排序 &#x1f4a6; 交换排序冒泡排序快速排序&#x1f43e;霍尔版本补坑位版本前后指针版本非递归版本 &#x1f4a6; 归并排序递归版本非递归版本 &#x1f4a6; 性能测试 &am…

Kotlin 教程(环境搭建)

Kotlin IntelliJ IDEA环境搭建 IntelliJ IDEA 免费的社区版下载地址&#xff1a;Download IntelliJ IDEA – The Leading Java and Kotlin IDE 下载安装后&#xff0c;我们就可以使用该工具来创建项目&#xff0c;创建过程需要选择 SDK&#xff0c; Kotlin 与 JDK 1.6 一起使…

【数据结构与算法】6.栈

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

Qt编写手机端视频播放器/推流工具/Onvif工具

一、视频播放器 同时支持多种解码内核&#xff0c;包括qmedia内核&#xff08;Qt4/Qt5/Qt6&#xff09;、ffmpeg内核&#xff08;ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6&#xff09;、vlc内核&#xff08;vlc2/vlc3&#xff09;、mpv内核&#xff08;mpv1/mp2&#xff09;、…

《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)

文章目录 1.1 HTML 简介与历史&#xff08;&#x1f609;&#x1f310;&#x1f47d;踏上神奇的网页编程之旅&#xff09;1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…

第八篇【传奇开心果系列】beeware的toga开发移动应用示例:实现消消乐安卓手机小游戏

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、初步实现四、扩展思路五、实现游戏逻辑示例代码六、实现界面设计示例代码七、实现增加关卡和难度示例代码八、实现存档和排行榜示例代码九、实现添加特殊方块和道具示例…

C++提取ICO图标(PE文件资源提取)

最近需要写一个提取EXE或者DLL图标资源的功能, 网上找了很久, 要么功能不好用, 最后结果如下: 1.很多是加载为HICON句柄后转换为图片保存, 全损画质..., 2.后来找了个还能用的, 详见 https://github.com/TortoiseGit/TortoiseGit/blob/master/src/Utils/IconExtractor.cpp …

[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…