Java中的随机数

关于Java里产生1-6随机数的方法 

一种是 (int)(Math.random()*10)%6+1 

另一种 (int)(Math.random()*6)+1 

这两种方法都可以产生1-6的随机数,但是问题在于产生1-6的几率是否相等。 

第一种感觉是不相等的,第二种感觉是相等 

高手来分析下 
匿名 回答:5 人气:16 解决时间:2009-08-24 21:42 
满意答案 
好评率:0% 

我认为2种方法产生的1~6的几率是相等的,都为1/6. 

第一种(int)(Math.random()*10)%6得到0~6的随机数,每个数的产生的概率为1/7,再加上1,得到1~6的随机数,0不再出现,每个数产生的几率1/6. 

另一种(int)(Math.random()*6)产生0~5,每个数产生的概率为1/6,再加上1,得到1~6的随机数,每个数产生的几率仍为1/6. 
回答人的补充   2009-08-23 17:08 

呃。。我又想了下,应该是这样的: 

Math.random()随机产生0~0.9 

第一种方法:(int)(Math.random()*10)随机产生0~9的数再%6,随机产生0~6的随机数,其中在0~9中: 

0,6产生0 

0,6产生0 

回答人的补充   2009-08-23 17:22 

郁闷,刚才不小心按提交了~ 
(int)(Math.random()*10)产生0~9的随机数,再%6,产生0~6的随机数。 
最后加1,产生1~6的随机数。 
在0~9的随机数中,要产生1~6的随机数,有: 
0 产生 1 
1 产生 2 
2 产生 3 
3 产生 4 
4 产生 5 
5 产生 6 
6 产生 1 
7 产生 2 
8 产生 3 
9 产生 4 
这里产生1,2,3,4的概率都为2/10. 
产生5,6的概率都为1/10 


(int)(Math.random()*6)产生0~5随机数,再加1,得到1~6的随机数 
在这里的0~5的随机数中,要产生1~6的随机数,有: 
0 产生 1 
1 产生 2 
3 产生 4 
4 产生 5 
5 产生 6 
这里1~6产生的概率均为1/6 

综上,正如楼主所感觉,第1种方法产生1~6的几率是不相等的,第2种方法产生1-6的几率是相等的 
评价答案 

    * 
      您已经评价过! 
      好:0 
    * 
      您已经评价过! 
      不好:0 

    * 
      您已经评价过! 
      原创:0 
    * 
      您已经评价过! 
      非原创:0 

^_^Cyndi`▓ 

回答采纳率:31.4% 2009-08-23 12:40 
满意答案 
好评率:100% 

用java.util.Random 类比较好用 

Random r=new Random(); 

int i=r.nextInt(6)+1; 

生成1到6的数字应该机率比较相等; 

(int)(Math.random()*10)%6+1产生0到9内的整数再 得到1,2,3,4的概率大些 

因为(int)(Math.random()*10)%得到的数是从0到9;0%6+1=1.。。。。。。5%6+1=6 

……6%6+1=1.。。。。9%6+1=4; 

所以不相等 

另一种 (int)(Math.random()*6)+1 

从0.1到0.9 *6得到数是int型是0,1,1,2,3,3,4,4,5, 



回答人的补充   2009-08-23 12:52 

+后,为1,2,2,3,4,4,5,5,6 

仍不相等。 

2,4,5的机率比较大。 
评价答案 

    * 
      您已经评价过! 
      好:1 
    * 
      您已经评价过! 
      不好:0 

    * 
      您已经评价过! 
      原创:0 
    * 
      您已经评价过! 
      非原创:0 

拨云子 

回答采纳率:22.9% 2009-08-23 12:48 
我有更好的回答 
收藏 
转载到QQ空间 
转播到腾讯微博 
相关知识 

    * •在 Java 中怎样产生1~10的随机数4回答2010-05-19 
    * •Java中怎样产生随机数和随机字母啊1回答2010-07-07 
    * •Java如何实现随机数?5回答2010-01-22 

更多java产生随机数1-5相关知识>> 
其他答案 
math.random 产生的是什么 
well 

回答采纳率:28.9% 2009-08-23 12:02 

    * 
      您已经评价过! 
      好:5 
    * 
      您已经评价过! 
      不好:0 

Math类的方法fandom随机生成一个0.0到1.0(不含1.0)之间的double值 

(int)(Math.random()*10)产生0到9内的整数再 %6 确实可以得到 1~6的随机数,但是 7 8 9 %6 一样得到 1 2 3 ,是不是1 2 3 得到的几率会大一些些呢?呵呵 

(int)(Math.random()*6)产生0到5内的整数,。。。你可以设计一个小程序来试验,发现它的六个数出现的几率是差不多的。 

回答人的补充   2009-08-23 12:28 

是random.打错字,嘿嘿 

侊景國際 

回答采纳率:23.9% 2009-08-23 12:27 

    * 
      您已经评价过! 
      好:5 
    * 
      您已经评价过! 
      不好:0 

这是概率学的问题 概率肯定是一致的 

当然如果想要想出彩票那样控制 就另说了 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值