通过模拟斗地主案例来练习集合的使用

  • 结果预览:
  • 思路:
  • 具体代码实现:
    • 1.创建集合装扑克牌
  • 2.洗牌和发牌
  • 3.定义看牌方法
  • 原码:

结果预览:

每次发牌后,三位玩家的手牌是随机的并且已经按照手牌大小排完序,运行两次验证手牌的随机性。


马老师的牌还不错,芜湖~起飞

思路:

1.创建HashMap,键是编号,值是牌。
2.创建ArrayList,存储编号。
3.创建花色数组和点数数组。
4.从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号。
5.洗牌(洗的是编号),用Collections的shuffl()方法实现。
6.发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合。
7.定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
8.调用看牌方法

为了方便理解,我用图形的方式来描述下过程:

具体代码实现:

1.创建集合装扑克牌


//创建HashMap集合   key是编号用Integer  value是牌用StringHashMap<Integer,String>  hm=new HashMap<>();//创建ArrayList集合用来存储编号ArrayList<Integer> list=new ArrayList<>();//创建花色数组和点数数组String [] color={"♠", "♦", "♥","♣"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号int index=0;//增强For循环存储花色和点数for(String num:number){for(String col:color){hm.put(index,col+num);list.add(index);index++;}}//52张牌存完了 还剩大小王  现在添加进去hm.put(index,"小王");list.add(index);index++;hm.put(index,"大王");list.add(index);//以上的操作实现了把54张扑克牌放入一个集合容器。

2.洗牌和发牌

   //洗牌(洗的是编号),用collections的shuffle()方法实现。Collections.shuffle(list);//发牌  用TreeSet接收  用三位玩家名字命名TreeSet<Integer> PDD=new TreeSet<>();TreeSet<Integer> DaSiMa=new TreeSet<>();TreeSet<Integer> LuBenWei=new TreeSet<>();//三张底牌TreeSet<Integer> finalCard=new TreeSet<>();for(int x=0;x<list.size();x++){//定义一个变量接收索引int  a= list.get(x);//最后三个索引if(x>=list.size()-3){finalCard.add(a);}else if(x%3 == 0){PDD.add(a);}else if(x%3 == 1){DaSiMa.add(a);}else {LuBenWei.add(a);}}

3.定义看牌方法

      //定义看牌的方法(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)public  static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String>  hm ){System.out.print(name+"的手牌为:");//遍历牌 就是遍历索引for(Integer key:ts){String poker = hm.get(key);System.out.print(poker+" ");}System.out.println();}

原码:

    package 模拟斗地主;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;/*需求:通过程序实现 斗地主过程中的洗牌,发牌和看牌功能,并且为了方便看牌手牌要排序。思路:1:创建HashMap集合,键是编号,值是牌。2:创建Arraylist集合用于存储编号。3:创建花色数组和点数数组。4:从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号。5 :洗牌(洗的是编号),用collections的shuffle()方法实现。6:发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收7:定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)8:调用方法看牌*/public class ChinesePoker {public static void main(String[] args) {//创建HashMap集合   key是编号用Integer  value是牌用StringHashMap<Integer,String>  hm=new HashMap<>();//创建ArrayList集合用来存储编号ArrayList<Integer> list=new ArrayList<>();//创建花色数组和点数数组String [] color={"♠", "♦", "♥","♣"};String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//从0开始往HashMap集合里面存储编号,并存储对应的牌。同时往ArrayList集合里面存储编号int index=0;//增强For循环存储花色和点数for(String num:number){for(String col:color){hm.put(index,col+num);list.add(index);index++;}}//52张牌存完了 还剩大小王  现在添加进去hm.put(index,"小王");list.add(index);index++;hm.put(index,"大王");list.add(index);//洗牌(洗的是编号),用collections的shuffle()方法实现。Collections.shuffle(list);//发牌  用TreeSet接收  用三位玩家名字命名TreeSet<Integer> PDD=new TreeSet<>();TreeSet<Integer> DaSiMa=new TreeSet<>();TreeSet<Integer> LuBenWei=new TreeSet<>();//三张底牌TreeSet<Integer> finalCard=new TreeSet<>();for(int x=0;x<list.size();x++){//定义一个变量接收索引int  a= list.get(x);//最后三个索引if(x>=list.size()-3){finalCard.add(a);}else if(x%3 == 0){PDD.add(a);}else if(x%3 == 1){DaSiMa.add(a);}else {LuBenWei.add(a);}}//调用看牌方法lookPoker("PDD",PDD,hm);lookPoker("大司马",DaSiMa,hm);lookPoker("卢本伟",LuBenWei,hm);lookPoker("底牌",finalCard,hm);}//定义看牌的方法(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)public  static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String>  hm ){System.out.print(name+"的手牌为:");//遍历牌 就是遍历索引for(Integer key:ts){String poker = hm.get(key);System.out.print(poker+" ");}System.out.println();}}

JavaSE基础案例之模拟斗地主相关推荐

  1. java基础案例-购物车模拟

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.需求 二.分析 三.代码 四.效果图 五.总结 一.需求 1.模拟购物车模块的功能,需要实现添加商品到购物车中去,同时需 ...

  2. 博学谷:【案例】模拟斗地主发牌游戏

    1.需求 ​ 使用一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱,然后分发给用集合表示的三个玩家和底牌,并打印玩家和底牌的集合内容. 2.步骤 买一副扑克牌,将花色和数字分别进行组合,生成所有的普 ...

  3. Java编程基础19——Map集合斗地主案例

    1_Map集合概述和特点 A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双 ...

  4. Java16-day07【Map(概述、特点、功能、遍历)、HashMap集合练习、集合嵌套、Collections、模拟斗地主升级版】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  5. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

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

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

  7. JavaSE基础18笔记集合

    18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接 ...

  8. java基础语法day20(Map、模拟斗地主发牌)

    第1章 Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. 1. Collection中的集合, ...

  9. 【JAVASE】模拟斗地主洗牌发牌

    1.案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 查看三人各自手中的牌(按照牌的大 ...

  10. java使用集合模拟斗地主洗牌发牌案例

    package com.itheima.模拟斗地主.斗地主版本2;import java.util.ArrayList; import java.util.Collections; import ja ...

最新文章

  1. 基于Lua脚本语言的嵌入式UART通信的实现
  2. Kingbase金仓更改表空间
  3. mask rcnn实例分割_使用Mask-RCNN的实例分割
  4. Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05
  5. mysql数据库特征_如何掌握MySQL数据库中动态表的特征
  6. 什么是RAID(独立磁盘冗余阵列)?
  7. 对软件研发项目管理的深入探讨
  8. mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击
  9. java c 传递字符串数组_JNI传递字符串数组J-StringArray
  10. HTML:对话框插件thickbox使用技巧
  11. 成功通过PMP认证考试的七大要点
  12. hdu2586How far away ?
  13. 360 自动 html 极速模式,用Meta标签代码让360双核浏览器默认极速模式打开网站不是兼容模式(顺带解决很多兼容性问题)...
  14. WinForm使用CefSharp,嵌入浏览器
  15. 佛说:前生五百次的凝眸,换今生一次的擦肩
  16. 【编译原理】LL(1)语法分析器
  17. 关于梯度和雅可比矩阵
  18. 李笑来python自学_自学是门手艺--李笑来
  19. python笔记手册_《Python 学习手册》读书笔记
  20. 有道翻译爬虫+JS逆向

热门文章

  1. 清华现超级“学霸” 15门课程100分4门99分(图)
  2. 关于DM MPP的搭建
  3. google vr 简介
  4. SpringBoot-refresh解析
  5. Java中WeakHashMap实现原理深究
  6. 笔记本电脑显示dns服务器出错,电脑出现dns错误无法上网的解决方法详解
  7. Codeforces - Mother of Dragons
  8. 用插件MAVEN-SUREFIRE-REPORT-PLUGIN生成HTML格式测试报告
  9. 惠普微型计算机主机拆卸,HP 惠普 Pavilion Wave 台式主机 拆机
  10. html关机命令,shutdown关机命令不起作用