1.首先,我们需要准备扑克牌花色和点数(大小王后面添加)

//准备扑克String[] flowers = {"♠", "♣", "♦", "♥"};String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

2.将准备的花色和点数凑齐一副扑克,两个增强for嵌套(同时添加大小王)

  //组合牌ArrayList<String> box = new ArrayList<>();//装牌for (String flower : flowers) {for (String number : numbers) {box.add(flower + number);}}box.add("joker");//小王box.add("JOKER");//大王

3. 准备3个用户集合装牌,1个集合装地主牌

  //准备用户和地主牌ArrayList<String> 周润发 = new ArrayList<>();ArrayList<String> 刘德华 = new ArrayList<>();ArrayList<String> 周星驰 = new ArrayList<>();ArrayList<String> 地主牌 = new ArrayList<>();

4.先将3张地主牌取出

  地主牌.add(box.get(box.size()-1));地主牌.add(box.get(box.size()-2));地主牌.add(box.get(box.size()-3));

5.给3个大佬发牌,因为就3个人所以对3取模

      //发牌for (int i = 0; i < box.size()-3; i++) {//已经取出3张地主牌,所以张数少3if (i % 3 == 0) {周润发.add(box.get(i));} else if (i % 3 == 1) {刘德华.add(box.get(i));} else {周星驰.add(box.get(i));}}

其实我们已经可以看到效果此时地主牌和大佬的牌已经取出,但是我们会发现一个问题,每次执行每个大佬手中的牌都一样,由于box集合是一个存储有序的集合,我们前面在循环flowers和number的时候他们的位置不会变,多以现在需要将牌的顺序打乱.

此时可以用到collectoions中的shuffle方法,将box集合中牌打乱

//洗牌 打乱顺序
Collections.shuffle(box);

此刻,一个基本的发牌就完成了

但是由于我们平时习惯,我们拿到手的扑克不会这么摆,因为看着太乱,不知道怎么出,我们习惯将牌从小到大从左到右摆-----所以我们此时需要将手里的牌进行一个排序.

但是问题又来了,扑克牌的大小如何控制?下面贴出扑克牌数字,扑克牌不是一组有序的数字,首先2和3怎么去排序?又怎么将2排到A后面,又怎么将joker和JOKER进行排序?

"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2","joker","JOKER"

有同学可能会想到collections的sort排序,我们可以看到结果是这样的

        Collections.sort(周润发);Collections.sort(周星驰);Collections.sort(刘德华);Collections.sort(地主牌);

由于我们前面泛型写的String,会根据第一个字符的Ascll码大小进行排序,所以就是我们看到的结果,将所有花色放在一起,然后相同的看第二个字符大小,但是这并不是我们想要的排序,满足不了我们的需求

所以我么必须自己去规定一个规则,让它去进行排序.我们可以用一张牌的第二个字符去规定大小,放在ArrayList这样的一个带索引集合中,在我们用的时候根据索引去取它的值.用addAll方法将元素全部添加进去

  ArrayList<Character> rule = new ArrayList<>();       Collections.addAll(rule,'3','4','5','6','7','8','9','1','J','Q','K','A','2','o','O');

然后我们用Comparator去创建匿名内部类,同时将方法赋给3个大佬

 Comparator<String> comparator=new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {char c1 = o1.charAt(1);//取第二个字符char c2 = o2.charAt(1);int i1 = rule.indexOf(c1);//集合中找索引int i2 = rule.indexOf(c2);return i1-i2;}};

这时候我们就可以看到我们习惯的摆牌方式了

只是一个简单的发牌+摆牌小Demo,写文章是为了整理思路,记录学习过程.

编程使我快乐,编程改变世界.

让我们用26个字符给人间带来便利

附:全部代码

   //准备扑克String[] flowers = {"♠", "♣", "♦", "♥"};String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//组合牌ArrayList<String> box = new ArrayList<>();for (String flower : flowers) {for (String number : numbers) {box.add(flower + number);}}box.add("joker");//小王box.add("JOKER");//大王System.out.println("box = " + box);//System.out.println("box.size() = " + box.size());//洗牌 打乱顺序Collections.shuffle(box);//准备用户和地主牌ArrayList<String> 周润发 = new ArrayList<>();ArrayList<String> 刘德华 = new ArrayList<>();ArrayList<String> 周星驰 = new ArrayList<>();ArrayList<String> 地主牌 = new ArrayList<>();地主牌.add(box.get(box.size()-1));地主牌.add(box.get(box.size()-2));地主牌.add(box.get(box.size()-3));//发牌for (int i = 0; i < box.size()-3; i++) {if (i % 3 == 0) {周润发.add(box.get(i));} else if (i % 3 == 1) {刘德华.add(box.get(i));} else {周星驰.add(box.get(i));}}//排序ArrayList<Character> rule = new ArrayList<>();Collections.addAll(rule,'3','4','5','6','7','8','9','1','J','Q','K','A','2','o','O');Comparator<String> comparator=new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {char c1 = o1.charAt(1);//取第二个字符char c2 = o2.charAt(1);int i1 = rule.indexOf(c1);//集合中找索引int i2 = rule.indexOf(c2);return i1-i2;}};Collections.sort(周润发,comparator);Collections.sort(周星驰,comparator);Collections.sort(刘德华,comparator);Collections.sort(地主牌,comparator);System.out.println("周润发 = " + 周润发);System.out.println("周星驰 = " + 周星驰);System.out.println("刘德华 = " + 刘德华);System.out.println("地主牌 = " + 地主牌);}

集合之扑克牌---洗牌+发牌+发牌后排序+看牌相关推荐

  1. Java项目:模拟扑克牌洗牌发牌排序

    用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤: 创建一个HashMap集合对象 创建一个ArrayList集合对象 生成一副扑克牌 将扑克牌按照键值关系添加到Hash ...

  2. 用JAVA实现简单的扑克牌洗牌发牌并排序

    用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤: 创建一个HashMap集合对象 创建一个ArrayList集合对象 生成一副扑克牌 将扑克牌按照键值关系添加到Hash ...

  3. 集合框架练习—使用JAVA语言模拟斗地主洗牌、发牌并对牌进行排序案例代码。

    未排序前: package File;import java.util.ArrayList; import java.util.Collections;public class Poker {/*** ...

  4. 扑克牌洗牌发牌java代码_java实战(一)之Java模仿斗地主洗牌发牌小游戏

    斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异.本节我们先来实现一下斗地主中的简单洗牌.发牌和看牌功能. 按照斗地主的规则,完成洗牌发牌的动作.具体规则为使用 54 张牌打乱顺序,3 ...

  5. Java——集合(模拟斗地主洗牌和发牌进行排序)

    //改进版,没有进行按牌的地位从小到大排序 package com.yy.test;import java.util.ArrayList; import java.util.Collections;p ...

  6. JAVA控制台扑克牌游戏,洗牌,发牌,比较大小

    此游戏是一个简单的并且很基础的java控制台程序.这个扑克牌游戏主要的游戏过程是:首先创建一副扑克牌,创建好了后要进行洗牌,牌洗好了,需要玩家来玩,接下来就创建玩家.有洗好的牌,也有玩家了,那么就开始 ...

  7. 洗牌、发牌算法 (打乱扑克牌顺序)

      #include <stdio.h> #include <stdlib.h> #include <time.h> int  d[6]; int  i,n,a,b ...

  8. Java实现扑克牌的洗牌发牌看牌

    需求: 通过程序实现斗地主过程中的洗牌,发牌和看牌 方法一: 只看到每位用户手中的牌: 思路: 1:创建一个牌盒, 也就是定义一个集合对象,用ArrayList集合实现 2:往牌盒里面装牌 3:洗牌, ...

  9. C语言 扑克牌洗牌发牌统计同花顺个数程序

    目录 一.2个算法关键点 关键点1:洗牌算法 关键点2:查找同花顺算法 二.运行结果 三.完整代码 题目: 一张扑克牌可用结构类型描述,一副扑克牌的52张牌则是一个结构数组. 1.试编写洗牌函数和供4 ...

最新文章

  1. Facebook iOS 应用是如何加速图片显示的?
  2. zlib 离线安装_黑板派Python扩展库安装与常见问题解决完整指南
  3. 蓝桥杯 1454 蚂蚁感冒 (找规律)
  4. android录音功能的实现
  5. 最小生成树与最短路径的区别以及实现方法
  6. 傅立叶变换、拉普拉斯变换、Z变换之间 篇二
  7. linux异常关机内存,linux关机及问题解决
  8. 翼虎 android,福特翼虎成首款同时兼容CarPlay和Android Auto的车型
  9. 【Flink】SASL encryption trust check: localHostTrusted = false, remoteHostT
  10. 西邮计算机学院院长,西安邮电大学计算机学院
  11. 铭瑄显卡不支持Linux,完善支持 NV显卡Linux驱动275.19正式版
  12. python运行中更改代码_运行时更改python源代码
  13. ex10_10MyInteger类
  14. linux学习日志,linux学习日记范文
  15. 完美卸载office
  16. QuickTime格式解析
  17. EasyExcel 动态表头 + 数据单元格合并
  18. ctf writeup之程序员密码
  19. Bootstrap(三) 网格系统
  20. 关于Debug.Log的一点儿小知识

热门文章

  1. XS-Leaks漏洞
  2. 视频编码起源历史发展及现状
  3. BigDecimal如何比较大小
  4. 希腊字母的发音(希腊人的发音)
  5. Revit开发之载入族的创建小技巧
  6. 面向对象的C++了解
  7. 使用VirtualBox搭建分布式集群环境记录
  8. 阿里云服务器CentOS搭建
  9. 魅族手机TOF摄像头搭载奥比中光解决方案,看看到底有哪些功能?
  10. 使markdown文档中的图片居中