需求

拟斗地主洗牌和发牌

分析

1,买一副扑克(自己创建一个集合对象,将扑克牌存储进去)
2,洗牌
3,发牌 (发牌后,发的牌没有大小顺序排序)
4,看牌

实现(shuffle()方法)

  1. public class Test1Shuffle {
  2. /**
  3. *扑克牌
  4. */
  5. private static final String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
  6. private static final String[] color = {"红桃","黑桃","方片","梅花"};
  7. //一副扑克牌
  8. private static final ArrayList<String> coll = new ArrayList<>();
  9. static {
  10. //拼接花色和数字
  11. for(String s1 : color) {
  12. for(String s2 : num) {
  13. coll.add(s1.concat(s2)); //concat连接两个字符串
  14. }
  15. }
  16. coll.add("小王");
  17. coll.add("大王");
  18. }
  19. public static void main(String[] args) {
  20. //1,洗牌
  21. Collections.shuffle(coll);
  22. //System.out.println(coll);
  23. //2,发牌
  24. ArrayList<String> p1 = new ArrayList<>();
  25. ArrayList<String> p2 = new ArrayList<>();
  26. ArrayList<String> p3 = new ArrayList<>();
  27. ArrayList<String> p0 = new ArrayList<>();//底牌
  28. for(int i = 0; i < coll.size(); i++) {
  29. if(i >= coll.size() - 3) {
  30. p0.add(coll.get(i)); //将三张底牌存储在底牌集合中
  31. } else if(i % 3 == 0) {
  32. p1.add(coll.get(i));
  33. } else if(i % 3 == 1) {
  34. p2.add(coll.get(i));
  35. } else {
  36. p3.add(coll.get(i));
  37. }
  38. }
  39. //3,看牌
  40. System.out.println(p1);
  41. System.out.println(p2);
  42. System.out.println(p3);
  43. System.out.println(p0);
  44. }
  45. }
[梅花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