zoukankan      html  css  js  c++  java
  • 集合练习 之 斗地主发牌

     

     

     

    》HashMap 的key底层数据结构是哈希表

    》ArrayList 底层数据结构是数组,查询快,增删慢

    》TreeSet  底层数据结构式红黑树(平衡二叉树),默认构造器采用自然排序(Integer已经实现了Comparable接口 )。

     

     

    package cn.itcast.day18;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.TreeSet;
    /*
     * 斗地主 发牌程序
     * 
     * A:创建HashMap<Integer,String>用于存放装牌号和牌。
     * B: 创建花色数组,创建点数数组(3最小)
     * B:创建ArrayList用于存放牌号
     * C: 把牌号和牌放到对应的HashMap中,同时把牌号放到ArrayList中
     * C:洗牌(洗牌号)
     * D: 发牌,遍历ArrayList中的牌号,去HashMap中招对应的牌,用TreeSet存放牌.
     * E: 遍历每一个TreeSet得到对应人的牌
     */
    public class PokerDemo {
    
        public static void main(String[] args) {
            //创建牌核
            HashMap<Integer,String> hm=new HashMap<Integer,String>();
            
            //创建牌号盒
            ArrayList<Integer> array=new ArrayList<Integer>();
            
            
            //创建花色数组
             String[] colors={"♢","♧","♠","♥"};
            //创建点数数组 
             String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
             
             //把牌号和牌存入HashMap,把牌号存入ArrayList中
             int index=0;
             for(String number:numbers){
                 for(String color:colors){
                     String s=color.concat(number);
                     hm.put(index,s);
                     array.add(index);
                     index++;
                 }
             }
             hm.put(index, "大王");
             array.add(index);
             index++;
             hm.put(index, "小王");
             array.add(index);
             
             //洗牌
             Collections.shuffle(array);
             
             //发牌时用TreeSet存放
             TreeSet<Integer> sunWuKong=new TreeSet<Integer>();
             TreeSet<Integer> zhuBaJie=new TreeSet<Integer>();
             TreeSet<Integer> shaHeShang=new TreeSet<Integer>();
             TreeSet<Integer> diPai=new TreeSet<Integer>();
             
             //遍历洗过的牌号集合ArrayList,并发牌号
            for(Integer i:array){
                if(array.size()-i<=3){
                    diPai.add(i);
                }else if(i%3==2){
                    sunWuKong.add(i);
                }else if(i%3==1){
                    zhuBaJie.add(i);
                }else if(i%3==0){
                    shaHeShang.add(i);
                }
            }
            lookPoker("孙悟空",sunWuKong,hm);
            lookPoker("猪八戒",zhuBaJie,hm);
            lookPoker("沙和尚",shaHeShang,hm);
            lookPoker("底牌",diPai,hm);
            
        }
        
        
        public static void lookPoker(String name,TreeSet<Integer> pai,HashMap<Integer,String> hm){
            System.out.print(name+"的牌是 :");
            for(Integer i:pai){
                System.out.print(hm.get(i)+" ");
            }
            System.out.println();
        }
    
    }
    /*

    孙悟空的牌是 :♠3 ♧4 ♢5 ♥5 ♠6 ♧7 ♢8 ♥8 ♠9 ♧10 ♢J ♥J ♠Q ♧K ♢A ♥A ♠2
    猪八戒的牌是 :♧3 ♢4 ♥4 ♠5 ♧6 ♢7 ♥7 ♠8 ♧9 ♢10 ♥10 ♠J ♧Q ♢K ♥K ♠A ♧2
    沙和尚的牌是 :♢3 ♥3 ♠4 ♧5 ♢6 ♥6 ♠7 ♧8 ♢9 ♥9 ♠10 ♧J ♢Q ♥Q ♠K ♧A ♢2
    底牌的牌是 :♥2 大王 小王

    */
  • 相关阅读:
    ASP.NET HttpRuntime.Cache缓存类使用总结
    ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
    Echarts图表控件使用总结2(Line,Bar)—问题篇
    数据库查询实例(包含所有where条件例子)
    php file_get_contents读取大容量文件方法
    如何给mysql用户分配权限
    dedecms {dede:php}标签用法介绍
    js获取字符串最后一个字符代码
    CSS3选择器之学习笔记
    SQL中实现SPLIT函数几种方法
  • 原文地址:https://www.cnblogs.com/qq-757617012/p/4290680.html
Copyright © 2011-2022 走看看