使用Random工具类来解决等概率随机问题

        在Android中提供了一个用来产生随机数的工具类Random,通过Random.nextInt(int n)方法就可以在区间[0,n)等概率地产生一个伪随机数。通过这个方法,我们可以有效地解决一些等概率随机类的问题。
        问题一:等概率生成[1,100]的100个随机数。
        思路:用一个数组int[] array = new int[100]来容纳这些数据,并依次初始化成1,2,3……99,100。然后通过Random.nextInt(n+1)(n代表数组下标,位于[0,99])方法在区间[0,n]等概率地产生一个随机数m。然后,将a[n]与
a[m]中的数据进行交换,同时将产生随机数的截止区间减1(即Random.next(n)),开始产生下一个随机数。这样就相当于实现了为a[n]等概率生成了一个位于区间[1,100]的随机数,同时这个已经分配给a[n]的数字也不会在以后的随机数产生过程中再次出现了。具体实现如下:
int[] array = new int[100];
for (int i = 0; i < array.length; i++) {
    array[i] = i + 1;
}
for (int n = array.length - 1; n > 0; n--) {
    int m = new Random().nextInt(n + 1);  //等概率产生[0,n]之间的一个随机数
    if (m != n) {
        int temp = array[n];
        array[n] = array[m];
        array[m] = temp;
    }
}
        问题二:对于52张牌,实现一个随机打散扑克牌顺序的程序。
        思路:同样,可以用一个数组来表示这52张牌,遍历这个数组,在剩下的数组元素里随机取出一个并与当前正在遍历的元素进行交换。这样,每次遍历完后的元素就不会参与到 下一次的随机抽取当中去了。具体实现只需要将上面程序当中的100改为52就可以了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值