import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.TreeSet;
public class Test02 {
public static void main(String[] args) {
String[] num={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] color={"梅花","方块","红桃","黑桃"};
//定义两个字符串数组,用于遍历拼接模拟扑克牌
HashMap hm=new HashMap<>();
//1,创建一个双列集合用于存储扑克牌, 其中键值对为 索引 和 扑克牌值
ArrayList list =new ArrayList<>();
//2,创建一个单列集合,用来存储索引, 后续对索引进行操作
int index =0; //实现索引和值的有序装入
//3,遍历字符串,有序的装入到双列集合中
for(String n: num) { //增强for循环 ,外层遍历数字
for(String c: color) {
hm.put(index,c.concat(n)); //可以实现从梅花3, 方块3, 红桃3,黑桃3,...依次递增
list.add(index);
//顺便把索引也进去单列集合中,因为 索引和值 是一一对应关系, 所以后面把索引打乱 就相当于洗牌
index++; //关键,不要忘了索引自增
}
}
//再装入大小王,此时index 因为把52张牌全装完了 ,索引51+ 1 =52跳出循环
hm.put(index,"小王");
list.add(index);
index++ ;
hm.put(index, "大王");
list.add(index);
// System.out.println(hm); //测试 是否都有序转入了双列集合中
//4,把装入索引的集合打乱,相对于洗牌
Collections.shuffle(list);
//调用集合工具类用来随机置换集合中存储的索引值
//System.out.println(list); //测试用
//5 开始发牌了 ,就是分发打乱的索引
//创建4个集合,模拟3个人和底牌
TreeSet gaojin= new TreeSet<>();
//这里创建的是TreeSet集合,因为他实现了排序, 在看牌的时候,所有的牌已经按照索引的升序排序了,而在扑克牌内容也是升序的
TreeSet duxia= new TreeSet<>();
//Integer类实现了Comparable接口, 重写了compareTo方法, 自然顺序排序
TreeSet me= new TreeSet<>();
TreeSet dipai= new TreeSet<>();
for(int i=0;i=list.size()-3) {
dipai.add(list.get(i));
/*获取集合中的索引, 最后三张的先留下来做底牌 此处应该注意一下, 该处获取的是集合中已经打乱存储的索引值,而不是集合自身所带的角标,虽然list集合中也有自己的索引,但是这个获取的是里面存储的值*/
}else if(i%3==0) { //第一张给高进
gaojin.add(list.get(i));
}else if(i%3==1) { //第二张给赌侠
duxia.add(list.get(i));
}else {
me.add(list.get(i)); //第三张给我,依次循环发牌 ,直到牌发完
}
}
//6,发牌完成,现在看牌,分别看这四堆牌,此时定义一个方法
lookPoker("高进", gaojin, hm);
lookPoker("赌侠", duxia, hm);
lookPoker("我的", me, hm);
lookPoker("底牌", dipai, hm);
}
//看牌方法,传入三个参数
public static void lookPoker(String name,TreeSet ts,HashMap hm) {
System.out.print(name+"的牌如下:");
for(Integer i:ts) {
System.out.print(hm.get(i)+" "); //根据索引到双列集合中获取到对应的牌的内容
}
System.out.println(); //输入一个换行,用于每个人的牌占一行, 能直观的看到
}