集合嵌套+斗地主案例
集合嵌套
l 准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
l 洗牌:
通过数字完成洗牌发牌
l 发牌:
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
l 看牌:
通过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恭喜收到好牌"); } }