需求:
通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌排序
思路:
1:创建HashMap,键是编号,值是牌
2:创建ArrayList,储存编号
3:创建花色数组和点数数组
4:从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList存储对应的编号
5:洗牌(洗的是编号),用Collections的shuffle()方法实现
6:发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
7:定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找到对应的牌)
package collections;
import java.util.*;
public class PokerDemo {
public static void main(String[] args) {
HashMap<Integer, String> hashMap = new HashMap<>();
ArrayList<Integer> array = new ArrayList<>();
String[] colors = {"♦", "♣", "♥", "♠"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//将花色数组和点数数组构成一副牌存入HashMap,并将索引添加到ArrayList集合
int index = 0;//对应牌的索引
for (String number : numbers) {
for (String color : colors) {
hashMap.put(index, color + number);
array.add(index);
index++;
}
}
hashMap.put(index, "小王");
array.add(index++);
hashMap.put(index, "大王");
array.add(index);
//遍历牌
/*Set<Integer> set = hashMap.keySet();
for (Integer i : set){
System.out.println(hashMap.get(i));
}*/
//洗牌
Collections.shuffle(array);
//发牌,给的是ArrayLsit里面存的牌对应的索引
TreeSet<Integer> array1 = new TreeSet<>();
TreeSet<Integer> array2 = new TreeSet<>();
TreeSet<Integer> array3 = new TreeSet<>();
TreeSet<Integer> array4 = new TreeSet<>();
for (int i = 0; i < array.size(); i++) {
int x = array.get(i);
if(i >= array.size() - 3) array4.add(x);
else if(i % 3 == 0) array1.add(x);
else if(i % 3 == 1) array2.add(x);
else if(i % 3 == 2) array3.add(x);
}
//看牌
seePoker(array1, hashMap);
seePoker(array2, hashMap);
seePoker(array3, hashMap);
seePoker(array4,hashMap);
}
//看牌方法
public static void seePoker(TreeSet<Integer> set, HashMap<Integer, String> poker){
for(Integer key : set){
System.out.print(poker.get(key)+" ");
}
System.out.println();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/43965efc957f19f18e7620de73513779.png)