java怎样从54张扑克牌中随机产生五张 不重复的

2026年09月26日 14:25
有1个网友回答
网友(1):

例如:有数组a = [1,2,3,4,5,6,7,8,9,10],使用首先产生一个0~10(不包含10)的随机数,用来做数组下标。
Random r = new Random();
int rand = r.nextInt(10);//0~10之间的随机数,但不包含10。
假如rand=3。我们把a[3]放到之前创建好的数组里,你要取5张牌,这个数组就5个长。
然后把a[3]与a[9]的位置交换,交换之后的数组为a=[1,2,3,10,5,6,7,8,9,4]
再次获取随机数,但这里获取的是0~9之间的随机数。
int rand = r.nextInt(9);
rand的值不可能是9,那么下标为9的元素就不可能出现,也就不会重复。
假如这次rand=6,再把a[6]放到之前创建好的数组里。
再把a[6]与a[8]交换,交换之后的数组为a=[1,2,3,10,5,6,9,8,7,4]
再获取随机数时int rand = r.nextInt(8),那么rand就不可能是8或9。以此类推。
===========
import java.util.Arrays;
import java.util.Random;

public class Test {
public static void main(String[] args) {
int[] puKe = new int[54];
for(int i = 0; i < puKe.length; i++) {
puKe[i] = i + 1;
}
int[] pai = faPai(puKe, 5);
Arrays.sort(pai);
System.out.println(Arrays.toString(pai));
}

public static int[] faPai(int[] puKe, int num) {
int[] pai = new int[num];//用来装载取出的牌,5个长。
int m = 0;//一共取5张,m表示当前取到第几张
int n = puKe.length;//随机数的范围,默认是0~n之间取随机数

Random r = new Random();

for(int i = 0; i < num; i++, n--) {
int rand = r.nextInt(n);//rand为0~n之间的随机数
pai[m++] = puKe[rand];//用随机数做下标,把牌放到pai数组中,然后m++

// rand位置上的牌与n-1位置上的牌交换,因为n再自减,所以n-1也在自减。
int temp = puKe[n - 1];
puKe[n - 1] = puKe[rand];
puKe[rand] = temp;
}
return pai;
}
}
=============
如果你有扑克牌图片,那么就可以把获取到的int[]中的元素做为图片数组的下标了。