集合嵌套+斗地主案例

集合嵌套

准备牌:

完成数字与纸牌的映射关系:

使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

洗牌:

通过数字完成洗牌发牌

发牌:

将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同纸牌的数字分配给不同的玩家与底牌。

看牌:

通过Map集合找到对应字符展示。

通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

HashMap<String, HashMap<Person,String>>

package com.oracle.demo02;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import com.oracle.demo01.Person;
public class Chongfu2 {
            public static void main(String[] args) {
                //集合嵌套
                HashMap<String, HashMap<Person,String>> oracle
                =new HashMap<String,HashMap<Person,String>>();
                //添加数据
                //hashmap<String>=班级名称,Hashmap<person,string>=姓名,年龄,成绩
                HashMap<Person,String> java0611=new HashMap<Person,String>();
                HashMap<Person,String> java0322=new HashMap<Person,String>();
                java0611.put(new Person("a",10),"10");
                java0611.put(new Person("b",11),"11");
                java0322.put(new Person("c",12),"12");
                java0322.put(new Person("d",13),"13");
                oracle.put("班级java0611", java0611);
                oracle.put("班级java0322", java0322);
                //遍历
                Set<String> className=oracle.keySet();
                Iterator <String>it=className.iterator();
                while(it.hasNext()){
                    String key=it.next();//获取字符串String=班级java0611
                    HashMap<Person,String> name=oracle.get(key);
                    //通过键获取的对应的值,HashMap<Person,String>
                    Set<Person> person=name.keySet();
                    //内循环,来获取HashMap<Person,String>的返回值,person是键
                        Iterator<Person> it1=person.iterator();
                        while(it1.hasNext()){//判断person键是否有值
                            Person person1=it1.next(); //判断person键的内容
                            System.out.println(key+person1+name.get(person1));
                            //得出字符串key班级键,对应的人员名称年龄person,加上后面的hashmap键person对应的值name的值
                            //System.out.println(key);
                            //System.out.println(name);
                        }
                    //Set<Person> cla=java0611.keySet();
                }
                
            }
    }

斗地主洗牌发牌

package com.oracle.demo02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class DouDiZhu1 {
    public static void main(String[] args) {
        //定义一个扑克牌map
        Map<Integer,String> pooker=new HashMap<Integer,String>();
        //定义一个ArrayList存储知道的53个牌
        ArrayList<Integer> pookerNum=new ArrayList<Integer>();
        //定义数组存储花纹和数字
        String [] color={"方块","红桃","黑桃","红心"};
        String [] num={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        
        //遍历
        //Set<Integer,String> set=pooker.keySet();
        int index=2;
        for(String num1:num){
            for(String col:color){
                pooker.put(index, num1+col);
                pookerNum.add(index);
                index++;
            }
        }
        //封装大小王
        pooker.put(0, "大王");
        pookerNum.add(0);
        pooker.put(1, "小王");
        pookerNum.add(1);
        
        //洗牌
        Collections.shuffle(pookerNum);
        //发牌
        ArrayList<Integer>bottom=new ArrayList<Integer>();
        ArrayList<Integer>player1=new ArrayList<Integer>();
        ArrayList<Integer>player2=new ArrayList<Integer>();
        ArrayList<Integer>player3=new ArrayList<Integer>();
        //遍历发牌,只要是需要全部里面拿出去的都需要遍历
        for(int i=0;i<pookerNum.size();i++){
            if(i<3){
                bottom.add(pookerNum.get(i));
            }
            else if(i%3==0){
                player1.add(pookerNum.get(i));
            }else if(i%3==1){
                player2.add(pookerNum.get(i));
            }else if(i%3==2){
                player3.add(pookerNum.get(i));
            }
        }
        //给牌排序
        Collections.sort(bottom);
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        //查看牌
        look("一号",bottom,pooker);
        look("二号",player1,pooker);
        look("三号",player2,pooker);
        look("四号",player3,pooker);
    }
        //看牌方法
        public static void look(String name,ArrayList<Integer> play,
                Map<Integer,String>pooker){
            System.out.print(name+"\t");
            for(int i:play){//通过ArrayList的值看map的牌
                System.out.print(pooker.get(i));
            }
            System.out.println("\t恭喜收到好牌");
        }
        
    }

 

posted @ 2019-08-16 09:59  lvyimin  阅读(161)  评论(0编辑  收藏  举报