我们都玩过扑克牌的小游戏,有没有想过扑克牌的发牌是怎样实现的呢?
首先,我们手里有一副牌,假设去掉大小鬼,我们手里的牌用数字1-52表示。我们每次只取出一个数字,那我们如何取出这些数字并且使每次取出的数字不重复?
其实很简单。我们用一个数组存这52个数。利用随机数取出一个数(随机数的范围为1-52),然后将该数与数组最后一个数交换位置,然后再次利用随机数取数,不过值得注意的是此时随机数的范围要减1(范围为1-51),然后将取出的数与位置倒数第二的数交换位置,依次类推......
发牌算法就可以如此实现,时间复杂度为O(n)。
代码实现:
package com.yc.card;
import java.util.Random;
public class Card {
public static void main(String[] args) {
int[] card = getCard(1);//获取一副牌
int len = card.length;
Random random = new Random();
for(int i=0; i<52; i++) {
int index = random.nextInt(len);
String str = showCard(card[index]);
System.out.println(card[index] +