本文以java双列集合HashMap为核心实现发牌操作:                               

思路:

1.准备牌:创建一个Map集合,存储牌的索引和组装好的牌

     创建一个list集合,来储存牌的索引。

     定义一个花色数组和牌的点数大小的数组,双重for循环来组装牌,大小王单独存入集合

2.洗牌:Colletions中的shuffle(List)方法来打乱牌的顺序

3.发牌:定义4个集合,存储玩家牌的索引和底牌的索引, 遍历存储牌索引的List集合,获取每一个牌的索引

4.排序:使用Collections中的方法sort(List)默认是升序排序

5.看牌:定义一个lookpoker()方法

代码:

    public static void main(String[] args) {
//存扑克
HashMap<Integer, String> poker = new HashMap<>();
//存扑克牌的索引
ArrayList<Integer> pokerIndex = new ArrayList<>();
//通过循环遍历组装牌;
String[] colors = {"♠","♥","♣","♦"};
String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
int index = 0;
poker.put(index, "大王");
pokerIndex.add(index++);
poker.put(index, "小王");
pokerIndex.add(index++);
 //循环嵌套遍历两个数组,组装52张牌,存储到集合中
for (String number : numbers) {
for (String color : colors) {
poker.put(index, color + number);
pokerIndex.add(index++);
}
}
// System.out.println(poker);
      //打乱牌的顺序
Collections.shuffle(pokerIndex);
// System.out.println(pokerIndex);
ArrayList<Integer> play1 = new ArrayList();
ArrayList<Integer> play2 = new ArrayList();
ArrayList<Integer> play3 = new ArrayList();
ArrayList<Integer> dipai = new ArrayList();
for (int i = 0; i < pokerIndex.size(); i++) {
if (i >= 51) {
dipai.add(pokerIndex.get(i));
} else if (i % 3 == 0) {
play1.add(pokerIndex.get(i));
} else if (i % 3 == 1) {
play2.add(pokerIndex.get(i));
} else {
play3.add(pokerIndex.get(i));
}
}       
// 使用Collections中的方法sort(List)默认是升序排序
        Collections.sort(dipai);
Collections.sort(play1);
Collections.sort(play2);
Collections.sort(play3); lookPoker("赌圣", poker, play1);
lookPoker("赌侠", poker, play2);
lookPoker("赌神", poker, play3);
lookPoker("底牌", poker, dipai);
} /*
定义一个看牌的方法,提高代码的复用性
参数:
String name:玩家名称
HashMap<Integer,String> poker:存储牌的poker集合
ArrayList<Integer> list:存储玩家和底牌的List集合
查表法:
遍历玩家或者底牌集合,获取牌的索引
使用牌的索引,去Map集合中,找到对应的牌
*/
public static void lookPoker(String name, HashMap<Integer, String> poker, ArrayList<Integer> list) {
//输出玩家名称,不换行
System.out.print(name + ":");
//遍历玩家或者底牌集合,获取牌的索引
for (Integer key : list) {
//使用牌的索引,去Map集合中,找到对应的牌
String value = poker.get(key);
System.out.print(value + " ");
}
System.out.println();//打印完每一个玩家的牌,换行
}

Java用集合实现斗地主发牌的更多相关文章

  1. java集合--模拟斗地主发牌洗牌

    import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...

  2. Java基础-集合的嵌套

    Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...

  3. 使用Java实现简单的斗地主案例

    使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...

  4. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  5. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  6. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  7. java.util 集合框架集合

    java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...

  8. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  9. Java学习-集合(转)

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

随机推荐

  1. Android中XML的命名空间、自定义属性

    命名空间(namespace) XML 命名空间提供避免元素命名冲突的方法. 举个例子,A学校有名学生叫做林小明,B学校也有名学生叫林小明,那我们如何识别这两名拥有相同名字的同学呢?这时候命名空间就派 ...

  2. 请求一个url的全过程

    最近在进行前端面试方面的一些准备,遇到了一个经典前端问题,一个url从输入到页面加载中间到底发生了什么,以前也认真想过这个问题,但是当时回答的都不全面,现在来好好总结一下: 总体来说分为以下六个步骤: ...

  3. Linux解压rar文件

    Linux解压rar文件(unrar安装和使用,分卷解压) windows平台很多压缩文档为rar文件,那么怎么做到Linux解压rar文件(unrar安装和使用)? 简单,centos5安装unra ...

  4. 第一章 笔记本电脑安装Linux系统(Centos7)

    目标:通过[Linux+Docke+Nginx+Jenkins+k8s(Kubernetes)+CICD(自动化)]进行项目部署 内容:根据个人进度实时分章节记录自己所遇到的问题 一.准备工作 1.下 ...

  5. ES5的 forEach, map 方法的实现

    如果浏览器不支持forEach,map方法, 要我们自己封装一个, 该怎么操作呢? 1. forEach Array.prototype.forEach = function(fn) { if (th ...

  6. mysql查找字段空、不为空的方法总结

    1.不为空 Select * From table_name Where id<>'' Select * From table_name Where id!='' 2.为空 Select ...

  7. 启动AutoCAD时自动加载.NET开发的DLL

    程序组织,建立名为*.bundle的文件夹,创建Contents子文件夹,并将dll,ico等文件放进Contents中,在*.bundle中创建PackageContents.xml文件,内容如下: ...

  8. 关于计算机学习的书(doc,mobi,epub,pdf四种格式)

    关于计算机学习的书(doc,mobi,epub,pdf四种格式) <html> <body> <div> 21天学通C+ +2016/6/22 18:47文條 30 ...

  9. flex: 1在ios10.2系统手机端的换行布局失败问题

    使用flex:1要追加flex-basis: auto;可以简写flex: 1 1 auto; 表格不可以用flex布局

  10. PHP FILTER_SANITIZE_EMAIL 过滤器

    定义和用法 FILTER_SANITIZE_EMAIL 过滤器删除字符串中所有非法的 e-mail 字符. 该过滤器允许所有的字母.数字以及 $-_.+!*'{}|^~[]`#%/?@&= N ...