我最近遇到了
Java中的Math.random()
类。 (而且)我想知道这堂课。例如,我试图编写一个需要从1到6的随机数的骰子游戏" roll"。这就是math.random()的用武之地。这行代码:
int random_num = (int) (Math.random() * 6) + 1;
CAN生成1到6之间的随机数。
我的问题在于
(Math.random() * 6)
这里。
我知道这段代码是如何工作的,Math.random()如何生成介于0.0到1.0之间的double值。它是如何乘以6的,最后是四舍五入的。
然而,我很困惑为什么一个随机数(比如说0.78396954122)乘以6可能会变成1到6之间的随机数。据说随机数0.78396954122乘以6,总是6,对吧? 2.78396954122无法突然弹出!我是Java的一个完整的菜鸟,如果你能帮忙解释一下,我将不胜感激。
先谢谢...
答案 0 :(得分:6)
然而,我很困惑为什么一个随机数(比如0.78396954122)乘以6可以成为1到6之间的随机数。据说随机数0.78396954122乘以6,总是6,对吗?
没有。 0.78396954122 * 6是4.70381724732,当被(int)
截断时变为4,当+ 1
完成时变为5。
同样,Math.random
可能会返回0.2481654,当乘以6时为1.4889924,(int)
截断为1,然后由于+ 1
而变为2。
如果是0.0485847 * 6,则为0.2915082,(int)
截断为0,由于+ 1
而变为1。
将返回的最低值Math.random
为0.0,由(int)
截断为0。 0 * 6为0,在+ 1
之后变为1。将返回的最高值Math.random
是0.99999999(等)(例如,它将是< 1
)。乘以6得到5.999999(等),被(int)
截断为5,然后由+ 1
变为6。
这就是我们如何从该代码中获得范围1-6。
答案 1 :(得分:1)
<强>的Math.random()强>
它生成一个介于0.0到1.0之间的随机数(总是小于1.0)。所以,在您的问题中,您说要在1 to 6
之间生成随机数,这就是为什么您将它乘以6,这样函数将返回的任何随机数将乘以6然后+ 1,这样它总是保持在1-6之间。
就像你说的那样,0.78396954122 * 6是6那么你的计算错了,
0.78396954122 * 6是4.7,(int)
将四舍五入为4。这在java中称为强制转换,最后它将变为4 + 1 = 5
这就是为什么你得到一个介于1-6之间的数字
答案 2 :(得分:0)
这是一个简单的数学运算:
x
x
乘以6会使其位于区间[0,6 [int
是截断(几乎保留原始数字的整数部分),因此该值为0,1,2,3,4或5 Math.random()如何生成介于0.0到1.0之间的double值。
生成伪随机数是件棘手的事。 Java规范没有定义如何实现它,所以我们无法告诉你它是如何工作的。但是如果你想知道如何生成伪随机数,那么Wikipedia PRNG page
可能是一个很好的条目