java--Map使用实现模拟斗地主洗牌发牌
一、Map相关知识总结
1:Map集合,元素是成对出现的<key,value>,包括HashMap集合、LinkedHashMap集合。
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。
2.常用的接口
3. Map集合遍历键找值方式
(1)通过键找值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Map<String,String> map= new HashMap<String,String>(); map.put( "星期一" , "Monday" ); map.put( "星期日" , "Sunday" ); map.put( "星期二" , "Tuesday" ); Set<String> keySet=map.keySet(); Iterator<String> it=keySet.iterator(); while (it.hasNext()){ String key=it.next(); String value=map.get(key); System.out.println(value); } |
(2)通过键值对
1 2 3 4 5 6 7 | Set<Map.Entry<String,String>> entrySet = map.entrySet(); Iterator<Map.Entry<String,String>> it=entrySet.iterator(); while (it.hasNext()){ Map.Entry<String,String> key=it.next(); String value=key.getValue(); System.out.println(value); } |
二、模拟斗地主洗牌发牌
1、分析:首先应准备牌:完成数字与纸牌的映射关系:使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系。
洗牌:通过数字完成洗牌发牌
发牌:将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。存放的过程中要求数字大小与斗地主规则的大小对应。将代表不同纸牌的数字分配给不同的玩家与底牌。
看牌:通过Map集合找到对应字符展示。通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
2.具体实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | package com.example; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Poker { public static void main(String[] args) { // TODO Auto-generated method stub /* * 准备花色,准备数字,map<牌的编号(共54张),牌(花色+数字)> * */ //1.花色 ArrayList<String>color = new ArrayList<String>(); color.add( "♠" ); color.add( "♥" ); color.add( "♦" ); color.add( "♣" ); //数字 ArrayList<String>number = new ArrayList<String>(); Collections.addAll(number, "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" , "K" , "A" , "2" ); //定义一个map集合:用来将数字与每一张牌进行对应 HashMap<Integer, String>map = new HashMap<Integer, String>(); int index= 0 ; for (String thisNumber : number) { for (String thisColor : color) { map.put(index++, thisColor+thisNumber); } } //加入大小王 map.put(index++, "小王" ); map.put(index++, "大王" ); ArrayList<Integer>cards = new ArrayList<Integer>(); for ( int i = 0 ; i<= 53 ; i++) { cards.add(i); } //洗牌 Collections.shuffle(cards); //创建三个玩家和底牌 ArrayList<Integer>iPlayer1 = new ArrayList<Integer>(); ArrayList<Integer>iPlayer2 = new ArrayList<Integer>(); ArrayList<Integer>iPlayer3 = new ArrayList<Integer>(); ArrayList<Integer>itCards = new ArrayList<Integer>(); //发牌 for ( int i= 0 ;i<cards.size();i++){ if (i>= 51 ){ itCards.add(cards.get(i)); } else { if (i% 3 == 0 ){ iPlayer1.add(cards.get(i)); } else if (i% 3 == 1 ){ iPlayer2.add(cards.get(i)); } else { iPlayer3.add(cards.get(i)); } } } //对每人手中的牌排序 Collections.sort(iPlayer1); Collections.sort(iPlayer2); Collections.sort(iPlayer3); Collections.sort(itCards); // ArrayList<String>sPlayer1 = new ArrayList<String>(); ArrayList<String>sPlayer2 = new ArrayList<String>(); ArrayList<String>sPlayer3 = new ArrayList<String>(); ArrayList<String>sCards = new ArrayList<String>(); for (Integer key : iPlayer1){ sPlayer1.add(map.get(key)); } for (Integer key : iPlayer2){ sPlayer2.add(map.get(key)); } for (Integer key : iPlayer3){ sPlayer3.add(map.get(key)); } for (Integer key : itCards){ sCards.add(map.get(key)); } System.out.println( "第一位:" +sPlayer1); System.out.println( "第二位:" +sPlayer2); System.out.println( "第三位:" +sPlayer3); System.out.println( "底牌:" +sCards); } } |
原来学过java,现在对其中一些知识进一步总结和学习,希望能更好的使用。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步