最近刷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;
}
这种方式很弱智,很浪费性能。后面有时间的话可能会使用其他方法来试试实现。