从card[51]开始扁历,把当前的card 与card[rand.nextInt(51)]交换,遍历一次后,也就随机得差不多了
int
shuffle
,思路就是遍历数组,在剩下的元素里再随机取一个元素,然后再在剩下的元素里再随机取一个元素。每次取完元素后,我们就不会让这个元素参与下一次的选取。
an array a of n elements (indices 0..n -1):
for i from n − 1 downto 1 do
random integer with 0
a[j] and a[i]
0 ≤ j ≤ i
,包括j=i
的情况,因为可能洗牌后某个牌未发生交换,比如第51张牌还是原来的第51张牌。
public void randomCards(){
int[] data = new int[ 52];
new
for ( int i = 0; i < data.length; i++)
data[i] = i;
for ( int i = data.length - 1; i > 0; i--) {
int temp = random.nextInt(i+ 1); //产生 [0,i] 之间的随机数
swap(data,i,temp);
}
}