一开始利用了ArrayList的直接组建一副扑克牌并利用Collections.shuffle()打乱牌序,
但是发现看牌时牌序太乱,不方便查看
于是利用了TreeSet自带的排序功能,扑克牌大小利用HashMap的键值对一一储存进去,最后通过索引值取出牌组。
//优化前的代码如下:
public static void main(String[] args) {
//1、创建一副扑克牌
String[] pai = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] hs = {"♠","♥","♣","♦"};
ArrayList<String> poker = new ArrayList<String>();
for (String s1 : hs) {
for (String s2 : pai) {
poker.add(s1.concat(s2));
}
}
poker.add("小王");
poker.add("大王");
//2、洗牌
Collections.shuffle(poker);
//3、发牌
ArrayList<String> mht = new ArrayList<String>(); //玩家马化腾
ArrayList<String> my = new ArrayList<String>(); //玩家马云
ArrayList<String> me = new ArrayList<String>(); //我
ArrayList<String> dp = new ArrayList<String>(); //底牌
for(int i = 0; i < poker.size() ; i++) {
if(i >=poker.size() -3) {
dp.add(poker.get(i)); //底牌
}
if(i % 3 ==0) {
mht.add(poker.get(i)); //手牌1
}
if(i % 3 == 1) {
my.add(poker.get(i)); //手牌2
}
if(i % 3 == 2) {
me.add(poker.get(i)); //手牌3
}
}
//4、显示大家的手牌与底牌
System.out.println("本轮的底牌是:"+dp);
System.out.println("马化腾的手牌是:"+mht);
System.out.println("马云的手牌是:"+my);
System.out.println("我的手牌是:"+me);
}
//使用TreeSet和HashMap优化后
public static void main(String[] args) {
//1、创建一副扑克牌
String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] color = {"♦","♣","♥","♠"};
HashMap<Integer, String> poker = new HashMap<Integer, String>(); //存储索引和扑克牌
ArrayList<Integer> list = new ArrayList<Integer>(); //存储索引
int index = 0 ; //记录索引值
for (String s1 : num) { //获取数字
for (String s2 : color) { //获取颜色
poker.put(index, s2.concat(s1));
list.add(index);
index ++;
}
}
poker.put(index, "小王");
list.add(index);
index ++;
poker.put(index, "大王");
list.add(index);
//2、洗牌
Collections.shuffle(list);
//3、发牌
TreeSet<Integer> mht = new TreeSet<>(); //玩家马化腾
TreeSet<Integer> my = new TreeSet<>(); //玩家马云
TreeSet<Integer> me = new TreeSet<>(); //我
TreeSet<Integer> dp = new TreeSet<>(); //底牌
for(int i = 0; i < list.size() ; i++) {
if(i >=poker.size() -3) {
dp.add(list.get(i)); //底牌
}
if(i % 3 ==0) {
mht.add(list.get(i)); //手牌1
}
if(i % 3 == 1) {
my.add(list.get(i)); //手牌2
}
if(i % 3 == 2) {
me.add(list.get(i)); //手牌3
}
}
lookPai(poker, dp, "底牌");
lookPai(poker, mht, "马化腾");
lookPai(poker, my, "马云");
lookPai(poker, me, "我");
}
//4、显示大家的手牌与底牌
public static void lookPai(HashMap<Integer, String> hm,TreeSet<Integer> ts,String name) {
System.out.print(name+":");
for (Integer i : ts) {
System.out.print(hm.get(i)+" ");
}
System.out.println();
}