使用随机数实现扑克牌洗牌的算法(弱智版)

最近刷leetCood有点着魔了,突然想写一个扑克牌洗牌的实现方式。

大脑中第一印象就是用随机数来实现:
1)随机数范围为1-54
2)建立一个集合来存放随机生成的数
3)新随机出来的数如果该集合有,则丢弃,反之则加进去

直接上代码吧,不完善,随便写写,不喜勿喷。

//实现方式一  使用随机数 随机生成54个在1-54范围内的数字,当这些数字不重复时,完成洗牌
    public static void ShuffleTheDeck() {
        System.out.println("开始时间:" + new Date());
        List reslutList = new ArrayList();
        //开始随机洗牌
        Random random = new Random();
        while (true) {
            int endRand = random.nextInt(54);
            reslutList.add(endRand+1);
            if (ifRepeat(reslutList) == false) {
                reslutList.remove(reslutList.size() - 1);
            }

            if (reslutList.size() >= 54) {
                break;
            }
        }
        System.out.println("结束时间:" + new Date());
        for (int j = 0; j < reslutList.size(); j++) {
            System.out.println(reslutList.get(j).toString());
        }
    }

    //该方法是判断集合中是否有重复元素的,如果有返回false,反之返回true
    public static boolean ifRepeat(List list) {
        HashSet set = new HashSet<>(list);
        Boolean bool = set.size() == list.size() ? true : false;
        return bool;
    }

这种方式很弱智,很浪费性能。后面有时间的话可能会使用其他方法来试试实现。

猜你喜欢

转载自blog.csdn.net/weixin_43829443/article/details/104004695