我已经注意到许多骰子滚动问题中的以下等式:
dice1 = (int)(Math.random()*6) + 1;
任何人都可以解释一下吗?
答案 0 :(得分:5)
Math.random()
返回介于0.0(含)和1.0(不包括)之间的双精度。
将它乘以6,你会得到0.0(含)和6(不含)之间的双倍。
将它转换为int,你将获得一个0到5之间的整数。
添加1,您将获得1到6之间的随机整数。
答案 1 :(得分:4)
Math.random
返回0(包括)和1(不包括)之间的随机实数
Math.random*6
然后会给出0(包括)和6(不包括)之间的实数
(int)(Math.random*6)
会将其转换为int,in(0,1,2,3,4,5)
总和+1在最后获得1到6之间的东西(掷骰子)。
答案 2 :(得分:2)
这不是一个等式,它是一个任务。
Math.random()
生成[0,1]范围内的随机数。将此乘以6,您将获得[0,6]范围内的数字。然后将该数字截断为int
并添加一个,以获得范围[1,7]中的整数,这与[1,6]相同,因为我们正在处理整数。
长话短说 - 这个赋值产生一个1到6(含)之间的随机数,以模拟掷骰子。
答案 3 :(得分:1)
dice1是一个引用dice1的对象。 Math.random()表示Math包中的随机方法。 * 6将返回0到5之间的数字。 +1使它在1到6之间。 这被转换为int,这意味着它被转换为数字。
答案 4 :(得分:1)
Math.random()
产生一个0到0.9999范围内的数字.....乘以6变化范围到0.00到5.9999 ..... int
然后截断它,产生0, 1,2,3,4或5.添加1然后产生最终的1..6,
答案 5 :(得分:1)
很多答案显示为什么公式给出的结果在正确的范围内,但没有一个能解决这些结果的分布问题。随机数的分布与其范围一样重要。
Math.random()在[0.0,1.0]范围内生成一个均匀分布的数字。 (您会记得 x ≤ y 的符号[x,y)
表示该范围包含 x 和 y之间的所有内容,包括 x ,但不包括 y 。)统一分发意味着如果您采用任何子范围,例如[< em> a , b )其中0.0≤ a ≤ b ≤1.0,返回值在该范围内的概率是 ba 。也就是说,概率仅取决于子范围的宽度,而不取决于它开始的位置。
乘以6.0,您有一个仍然均匀分布的数字,但现在在[0.0,6.0]范围内。想象一下,它分为六个子范围[0.0,1.0],[1.0,2.0),...,[5.0,6.0)。所有这些子范围都具有相同的宽度,因此数字落入其中任何一个的概率与其在任何其他范围内的概率完全相同。
这些子范围还具有以下属性:当您将其中一个数字转换为(int)时,您将获得该范围底端的数字(当然,作为int)。例如,将[3.0,4.0]中的任何内容转换为int将为您提供3。
由于数字同样可能在任何范围内,因此在转换为int后,您将得到一个0到5的整数,这六个整数中的每一个都与其他整数完全一样。也就是说,您现在可以统一分布0到5的整数。
添加1以获得1到6范围内的均匀分布的整数。