- package com.itheima;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.TreeSet;
- public class Poker2 {
- /**
- * 分析: 模拟用户发扑克
- *
- * 1、 要有一副扑克
- * 2、分扑克之前要洗一下排
- * 3、每个人手中的排会自动排顺序
- * 4、三个人 考虑底牌问题(斗地主)
- */
- public static void main(String[] args) {
- //创建一副扑克
- String [] color={"红桃","黑桃","梅花","方块",};
- String [] pk ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
- //拼pk 四色花 以 pK 为主拼
- //for(int i = 0 ;i <pk.length; i ++)
- //用增强for
- //初使化计数器用 来当做 扑克的索引
- int index = 0;
- //创建一个有序集合 来存储 索引
- ArrayList<Integer> alist = new ArrayList<>();
- //创建一个HashMap来存储 poker
- HashMap<Integer,String> hm = new HashMap<>();
- for(String s1:pk) {
-
- for(String s2: color) {
-
- hm.put(index, s2.concat(s1)+"\t"); // 为扑克的格式良好 我们加下Table 转义符"\t"
- alist.add(index);//这里的index 自动装箱
- index++;
- }
-
- }//出了大for则扑克已经拼结完成 但还差 大王和小王
- //测试一下拼了多少张扑克
- //System.out.println(alist.size()); // 52张排
- //测试一下index 出了for 是多少
- //System.out.println(index); // 52 但我们是 从0 开始的 也就是说角标52 代表第三第排
- //那么我们添加大王
- hm.put(index, "大王"+"\t");
- alist.add(index);
-
- //添加小王
- index++;
- hm.put(index, "小王"+"\t");
- alist.add(index);
-
- //洗牌
- Collections.shuffle(alist);//打索引洗乱
-
- //创建3个人 这个三个要获取集合中的角标 而其还要有自然排序的功能 那么选TreeSet集合
- TreeSet<Integer> zhangzhen = new TreeSet<>();
- TreeSet<Integer> huwenpeng = new TreeSet<>();
- TreeSet<Integer> limingdao = new TreeSet<>();
- TreeSet<Integer> dipai = new TreeSet<>(); //把它们封装成一个集合
- //TreeSet<TreeSet<Integer>> tsset = new TreeSet<>(); //封装人的集合
- //Iterator<TreeSet<Integer>> it = tsset.iterator(); //获取人集合的迭代器
- //用for 循环
- /* //添加人
- tsset.add(zhangzhen);
- tsset.add(huwenpeng);
- tsset.add(limingdao);
- tsset.add(dipai);
-
- */
-
-
- //发排
- for(int i = 0; i<alist.size(); i++) {
-
- //参把底牌軣出来
- /*if(i>=alist.size()-3) { //如果i>=3了说明还剩下3张扑克
-
- dipai.add(i);
- }
- else if(i%3==0) {
-
- zhangzhen.add(i);
- }
- else if(i%3==1) {
-
- huwenpeng.add(i);
- }
- else {
-
- limingdao.add(i);
- }
- */
- //错误 分析: i 是ArrayList的角标 通过角标才能获取出 ArrayList集合中的元素 这里的元素
- //HashMap 里的Key一一对应 如上面的 则会只输出张珍一个人的。
- if(i>=alist.size()-3) { //如果i>=3了说明还剩下3张扑克
-
- dipai.add(alist.get(i));
- }
- else if(i%3==0) {
-
- zhangzhen.add(alist.get(i));
- }
- else if(i%3==1) {
-
- huwenpeng.add(alist.get(i));
- }
- else {
-
- limingdao.add(alist.get(i));
- }
-
- }
- seepoker("张珍",zhangzhen,hm);//tsset
- seepoker("胡文鹏",huwenpeng,hm);
- seepoker("李明道",limingdao,hm);
- seepoker("底牌",dipai,hm);
- }
- //封装一个方法 在显示器输出每个人排
- //分析:我们只要显示功能 则无需要返回值 那么 参数列表是 一 要有人 TreeSet 二 要有排 HashMap 三 还要有姓名
-
- //
- public static void seepoker(String name, TreeSet<TreeSet<Integer>> ts, HashMap<Integer,String> hs) {
-
- for(TreeSet<Integer> tsm:ts) { //把 3个人封装集合 集合的
-
- System.out.println(name+"排是:");
- for(Integer key:tsm) { //参数不加泛型下面会报错切记切记
-
- System.out.print(hs.get(key)); //这里不要换行
-
- }
- //加一个换行
- System.out.println();
-
- }
-
-
- }
- }
复制代码 |
|