第一种排序

根据花色,把相同的花色排到一起,然后将其花色一样的再进行排序

第一种排序参照代码中all()方法

第二种排序

真实的模拟斗地主游戏的排序玩法,即按照大王(这里用的是JOKER)joker2AKQJ109876543的顺序进行排序,花色顺序可以自己调整

第二种排序参照代码中all2()方法

下面是具体的代码实现,切换功能的话,可以修改无参构造器中的调用的具体方法,把all2()方法修改为all()方法即可切换

//模拟三人斗地主发牌
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;public class ThreeDemo2 {static List<Integer> list = new ArrayList<Integer>();static List<String> list1 = new ArrayList<String>();static List<String> list2 = new ArrayList<String>();static List<Integer> player1 = new ArrayList<Integer>();static List<Integer> player2 = new ArrayList<Integer>();static List<Integer> player3 = new ArrayList<Integer>();static List<Integer> diPai = new ArrayList<Integer>();static int index = 0;static int spe;static Map<Integer, String> map = new HashMap<Integer, String>();public static void main(String[] args) {new ThreeDemo2();}public ThreeDemo2() {//也可以用数组进行存储...相对简单一点list1.add("♠");list1.add("♥");list1.add("♣");list1.add("♦");list2.add("2");list2.add("3");list2.add("4");list2.add("5");list2.add("6");list2.add("7");list2.add("8");list2.add("9");list2.add("10");list2.add("J");list2.add("Q");list2.add("K");list2.add("A");all2();pecialPai();//System.out.println(list.size());//System.out.println(list2.get(list2.size()-1));threePlayer();//System.out.println(map);//spe = pecialPai();look("赌神", player1, map);look("赌圣", player2, map);look("赌王", player3, map);look("底牌", diPai, map);System.out.print("地主牌为:");System.out.println(map.get(spe));}//按花色排序,然后在花色中排序,将list的集合下标赋给map的key作为标志public static void all() {map.put(index, "JOKER");list.add(index);index++;map.put(index, "joker");list.add(index);index++;for (String color : list1) {for (String num : list2) {map.put(index, color+num);list.add(index);index++;}}}//按电脑斗地主进行排序public static void all2() {map.put(index, "JOKER");list.add(index);index++;map.put(index, "joker");list.add(index);index++;for (int i = 0; i < list1.size(); i++) {map.put(index, list1.get(i)+list2.get(0));list.add(index);index++;}//一个大于号小于号的问题排了半天的错误,我吐了for (int i = list2.size()-1; i >= 1; i--) {for (int j = 0; j < list1.size(); j++) {map.put(index, list1.get(j)+list2.get(i));list.add(index);index++;}}}//随机一个地主牌的keypublic static void  pecialPai() {Random random = new Random();spe = random.nextInt(51);}//将标好的集合打乱,然后赋给三个集合,获得之后继续整理好public static void threePlayer() {Collections.shuffle(list);diPai.add(list.get(51));diPai.add(list.get(52));diPai.add(list.get(53));for (int i = 0; i < list.size()-3; i++) {if (i%3 == 0) {player1.add(list.get(i));}if (i%3 == 1) {player2.add(list.get(i));}if (i%3 == 2) {player3.add(list.get(i));}}//System.out.println(spe);for (int i = 0; i < player1.size(); i++) {if (player1.get(i) == spe) {player1.addAll(diPai);}}for (int i = 0; i < player2.size(); i++) {if (player2.get(i) == spe) {player2.addAll(diPai);}}for (int i = 0; i < player3.size(); i++) {if (player3.get(i) == spe) {player3.addAll(diPai);}}Collections.sort(player1);Collections.sort(player2);Collections.sort(player3);Collections.sort(diPai);}//将三个集合的下标对应到key,获取到内容,只打印内容public static void look(String name,List<Integer> player,Map<Integer,String> allPai) {System.out.print(name + ":");for (Integer key : player) {String value = allPai.get(key);System.out.print(value+" ");}System.out.println();}
}var foo = 'bar';

具体实现的图片如下:

切换方法为all()后的实现图为:

老规矩有什么,有什么bug或者不懂的可以私聊我哦qq:1638580498

java中使用集合模拟斗地主发牌的两种排序(根据大小或者花色)相关推荐

  1. java中char类型转换成int类型的两种方法

    java中char类型转换成int类型的两种方法 方法一: 第一种利用Integer包装类的方法Integer.parseInt Copychar ch = '9'; if (Character.is ...

  2. 在Java中实现SFTP协议文件传输的两种解决方案

    在Java中实现SFTP协议文件传输的两种解决方案 1.1 背景 1.2 关于 FTP /FTPS 1.3 关于SFTP 解决方案一:使用 JSch 库 解决方案二:使用sshj 库 这篇博文来聊聊在 ...

  3. java小程序扑克牌_用Java来写一个模拟斗地主发牌的小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. ...

  4. java中set集合的特点_Java 集合之 Set 集合

    Set 集合 Set 集合的特点无序.不可重复. Set 集合不能记住元素的添加顺序.Set 集合不能包含相同的元素,把两个相同的元素添加到同一个 Set 集合中,则添加失败,add() 方法返回 f ...

  5. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  6. 模拟斗地主发牌功能的设计与实现

    模拟斗地主发牌功能的设计与实现 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 牌类 牌有牌面值.花色及实际大小三个属性 import ja ...

  7. Python3模拟斗地主发牌

    模拟斗地主发牌,牌共54张, 花色:黑桃('\u2660'),梅花('\u2663'),方块('\u2665'),红桃('\u2666'),种类为:A2-10JQK,大小王(X, x) 三个人,每个人 ...

  8. python斗地主出牌算法_python模拟斗地主发牌

    本文实例为大家分享了python模拟斗地主发牌的具体代码,供大家参考,具体内容如下 题目:趣味百题之斗地主 扑克牌是一种非常大众化的游戏,在计算机中有很多与扑克牌有关的游戏.例如,在Windows操作 ...

  9. python 斗地主发牌_tkinter模拟斗地主发牌

    在上一篇文章的最后,我们留了一个小作业:花果山美男子:tkinter模拟扑克牌和狼人杀发牌​zhuanlan.zhihu.com 小作业2:模拟斗地主发牌,上方是牌库,实现从牌库到三个方向的动态发牌, ...

最新文章

  1. 【Go】Go基础(八):结构体和方法
  2. 生物信息学就是从统计和CS的community里借鉴合适的方法
  3. Unicode的前世今生
  4. 秒杀系统必须考虑的 3 个技术问题!
  5. PHP $_FILES中error返回值详解
  6. GDCM:转储GEMS Ultrasound MovieGroup的测试程序
  7. 构造代码块、静态代码块、构造方法的执行顺序
  8. android客户端和服务器实现传图片和文件
  9. IT人应当知道的10个行业小内幕
  10. 毕业准备:外企面试--基本涵盖了所有问题【附带有答案版本】
  11. 【前端】第一章 前端三要素、前后端分离的演变史
  12. css动画逐帧播放、缩放
  13. HBase编程api介绍(转)
  14. 关于ps cs6的滤镜 (抽出)
  15. Lua,LuaJIT,Luarocks的安装与配置-史上最详细【Linux】
  16. QT 使用QAxWidget和QAxObject操作DOCX和EXECL文件,包括修改数据、插入图片、修改表格、打印文档、复制SHEET、修改页码数等
  17. 怎样设置网络工作组计算机,如何建立计算机工作组?
  18. 吉林大学计算机学院三等奖学金,吉林大学奖学金评定方案.doc
  19. 高速单行道 IN Name Id”:道路入口有一辆车请求进入
  20. css绘制实心三角形

热门文章

  1. 串口console乱码_串口打印机不能打印或打印乱码
  2. 计算机网络——第三章 数据链路层(详细附图)
  3. 电子设计入门——各种不同的GND怎么接
  4. 祝早道日语七周年快乐!
  5. 干货集中营(分享)-每日分享妹子图和技术干货
  6. 固态硬盘坏了怎么恢复数据恢复
  7. python 妹子图抓取
  8. 2022年全球及中国工程机械租赁行业头部企业市场占有率及排名调研报告
  9. 我所知道的专业搜索引擎
  10. 自学IT和接受IT培训两者的优缺点分析