模拟斗地主洗牌和发牌,并对牌进行排序的操作
思路:创建一个HashMap集合存储编号及对应的卡牌,另创建一个ArrayList集合存储编号(可用此编号找到HashMap集合中对应的卡牌),调用Collections类的 shuffle(List<?> list)方法进行洗牌,然后创建TreeSet集合存储每个人得到的牌的编号(用TreeSet集合可以对编号进行默认排序),最后通过TreeSet集合中的编号打印输出每个人手中的牌。
代码加分析如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class PokerDemo {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<Integer, String>(); //创建HashMap集合
ArrayList<Integer> array = new ArrayList<Integer>(); //创建ArrayList集合
String[] color = { "♠", "♥", "♣", "♦" }; //创建花色数组
String[] number = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" }; //创建点数数组
int index = 0;
for (String num : number) {
for (String col : color) {
String poker = col.concat(num); //将花色和点数拼接
hm.put(index, poker); //按编号存储对应的牌
array.add(index); //将编号存入ArrayList集合
index++;
}
}
hm.put(index, "小王");
array.add(index);
index++;
hm.put(index, "大王");
array.add(index);
Collections.shuffle(array); //洗牌,洗的是编号
TreeSet<Integer> xiaoMing = new TreeSet<Integer>(); //创建TreeSet集合
TreeSet<Integer> xiaoHong = new TreeSet<Integer>();
TreeSet<Integer> xiaoLi = new TreeSet<Integer>();
TreeSet<Integer> diPai = new TreeSet<Integer>();
for (int i = 0; i < array.size(); i++) { //发牌,发的是编号
if (i >= array.size() - 3) {
diPai.add(array.get(i));
} else if (i % 3 == 0) {
xiaoMing.add(array.get(i));
} else if (i % 3 == 1) {
xiaoHong.add(array.get(i));
} else if (i % 3 == 2) {
xiaoLi.add(array.get(i));
}
}
lookPoker("小明", xiaoMing, hm); //看牌
lookPoker("小红", xiaoHong, hm);
lookPoker("小李", xiaoLi, hm);
lookPoker("底牌", diPai, hm);
}
public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) {
System.out.println(name + "的牌是:");
for (Integer key : ts) { //遍历TreeSet集合,得到编号
String value = hm.get(key); //根据编号得到HashMap集合中对应的值
System.out.print(value + " ");
}
System.out.println();
}
}