需求
分析
1,买一副扑克(自己创建一个集合对象,将扑克牌存储进去)
2,洗牌
3,发牌 (发牌后,发的牌没有大小顺序排序)
4,看牌
实现(shuffle()方法)
public class Test1Shuffle {/***扑克牌*/private static final String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};private static final String[] color = {"红桃","黑桃","方片","梅花"};//一副扑克牌private static final ArrayList<String> coll = new ArrayList<>();static {//拼接花色和数字for(String s1 : color) {for(String s2 : num) {coll.add(s1.concat(s2)); //concat连接两个字符串}}coll.add("小王");coll.add("大王");}public static void main(String[] args) {//1,洗牌Collections.shuffle(coll);//System.out.println(coll);//2,发牌ArrayList<String> p1 = new ArrayList<>();ArrayList<String> p2 = new ArrayList<>();ArrayList<String> p3 = new ArrayList<>();ArrayList<String> p0 = new ArrayList<>();//底牌for(int i = 0; i < coll.size(); i++) {if(i >= coll.size() - 3) {p0.add(coll.get(i)); //将三张底牌存储在底牌集合中} else if(i % 3 == 0) {p1.add(coll.get(i));} else if(i % 3 == 1) {p2.add(coll.get(i));} else {p3.add(coll.get(i));}}//3,看牌System.out.println(p1);System.out.println(p2);System.out.println(p3);System.out.println(p0);}}
[梅花A, 黑桃Q, 梅花5, 红桃8, 红桃9, 红桃Q, 方片J, 方片5, 黑桃7, 梅花3, 红桃J, 梅花9, 红桃6, 方片3, 大王, 红桃K, 红桃3]
[方片4, 梅花Q, 黑桃4, 黑桃J, 方片6, 梅花6, 黑桃8, 梅花J, 黑桃2, 黑桃6, 方片7, 梅花4, 红桃10, 红桃4, 梅花10, 梅花K, 黑桃9]
[梅花2, 红桃7, 方片A, 方片Q, 梅花7, 黑桃A, 红桃A, 黑桃K, 方片9, 梅花8, 方片2, 黑桃3, 方片8, 红桃5, 黑桃5, 红桃2, 黑桃10]
[方片10, 方片K, 小王]
升级版实现
利用索引,对发牌后的顺序进行从小到大排序
public class Test2ShufflePlus {
public static final String[] NUM = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
public static final String[] COLOR = {"红桃","黑桃","方片","梅花"};
public static final HashMap<Integer, String> PART = new HashMap<>(); //存储索引和扑克牌
public static final ArrayList<Integer> LIST = new ArrayList<>(); //存储索引
public static int INDEX = 0;
static {
//拼接扑克牌并索引和扑克牌存储在hm中
for(String s1 : NUM) { //获取数字
for(String s2 : COLOR) { //获取颜色
PART.put(INDEX, s2.concat(s1));
LIST.add(INDEX); //将索引0到51添加到list集合中
INDEX++;
}
}
//将大小王添加到双列集合中
PART.put(INDEX, "小王");
LIST.add(INDEX); //将52索引添加到集合中
INDEX ++;
PART.put(INDEX, "大王");
LIST.add(INDEX); //将53索引添加到集合中
}
public static void main(String[] args) {
//1,洗牌
Collections.shuffle(LIST);
//2,发牌
TreeSet<Integer> p1 = new TreeSet<>();
TreeSet<Integer> p2 = new TreeSet<>();
TreeSet<Integer> p3 = new TreeSet<>();
TreeSet<Integer> p0 = new TreeSet<>(); //底牌
for(int i = 0; i < LIST.size(); i++) {
if(i >= LIST.size() - 3) {
p0.add(LIST.get(i)); //将三张底牌存储在底牌集合中
}else if(i % 3 == 0) {
p1.add(LIST.get(i));
}else if(i % 3 == 1) {
p2.add(LIST.get(i));
}else {
p3.add(LIST.get(i));
}
}
//看牌
lookPoker(PART, p1, "p1");
lookPoker(PART, p2, "p2");
lookPoker(PART, p3, "p3");
lookPoker(PART, p0, "底牌");
}
/**
* 看牌
* 1,返回值类型void
* 2,参数列表HashMap,TreeSet,String name
*/
public static void lookPoker(HashMap<Integer, String> PART,TreeSet<Integer> ts ,String name) {
System.out.print(name + "的牌是:");
for(Integer i : ts) { //i代表双列集合中的每一个键
System.out.print(PART.get(i) + " ");
}
System.out.println();
}
}
p1的牌是:黑桃3 红桃4 方片4 黑桃5 红桃6 黑桃7 梅花7 方片8 梅花8 梅花9 方片J 梅花J 红桃Q 黑桃A 梅花A 红桃2 方片2
p2的牌是:梅花4 梅花5 黑桃6 梅花6 红桃7 方片7 黑桃9 方片9 红桃10 黑桃10 黑桃Q 方片K 梅花K 方片A 梅花2 小王 大王
p3的牌是:红桃3 方片3 梅花3 黑桃4 红桃5 方片5 方片6 黑桃8 红桃9 方片10 梅花10 红桃J 黑桃J 梅花Q 红桃K 黑桃K 黑桃2
底牌的牌是:红桃8 方片Q 红桃A
