怎么会?我认为“+1”是它可以产生最低的数字。这是一个问题:
“(INT)的Math.random()*(65535 + 1)返回一个随机数之间:介于0和65535 < - 解答
这是从sololearn挑战的问题。
方法Math.random()
的文件说:
返回带有正号,大于或等于0.0且小于1.0的双精度值。
很明显 - 数学表达,生成的时间间隔为<0, 1)
。这意味着,所产生的数量将永远不会达到1.0,但最大的数位下方(前。0.99
)。既然你65535
乘它,它永远不会达到65535
。这就是为什么你必须添加+1
。
我建议你使用类Random
和它的方法nextInt(int bound)
它的作用:
返回伪随机均匀分布的int值介于0(含)和指定值(不包括)
因此:
Random random = new Random();
int integer = random.nextInt(65536); // 65535 + 1 because the number is exclusive
你的代码,现在的方式:
(int) Math.random()*(65535 + 1)
你总是会得到0
。
所述Math.random()
method产生在范围[0,1)的数。
返回带有正号,大于或等于
double
且小于0.0
一个1.0
值。
当通过n
乘以这个数字,它的范围为[0,N)。它投射到int
截断数量的任意小数部分,使得该数字0
,和任何与0相乘是0铸造先发生,因为它是一个比higher precedence乘法。
让我们因此投相乘后出现添加括号。
(int) (Math.random()*(65535 + 1))
当通过n
乘以截短数,它有一个范围[0,N)。浇铸到int
乘法截断数量的任何小数部分后,通过使整数0的范围(N - 1)。
如果你乘和铸造之后添加1
,那么它可以产生最低的数目将是1
。添加前的范围将是0到65534,加入这将是1到65535之后。
(int) (Math.random()*65535) + 1
怎么会?我认为“+1”是它可以产生最低的数字...
这是因为+1
放在括号内。见下文:
(int) Math.random()*(65535 + 1) //is equivalent to
(int) Math.random()*(65536) //which is equivalent to
(int) 0.0 to number < 1.0 *(65536) //which gives you a range of..
(int) (0 * 65536) to (0.999.. * 65536) //which gives you..
(int) 0 to 65535.34464.. //converted to int gives you
0 to 65535
如果你想最小的随机数至少为1,添加它的随机操作完成后:
(int) (Math.random()*65535) + 1