Java中,随机数和sololearn挑战

问题描述 投票:0回答:3

怎么会?我认为“+1”是它可以产生最低的数字。这是一个问题:

“(INT)的Math.random()*(65535 + 1)返回一个随机数之间:介于0和65535 < - 解答

这是从sololearn挑战的问题。

java random
3个回答
0
投票

方法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

0
投票

你的代码,现在的方式:

(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

0
投票

怎么会?我认为“+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
© www.soinside.com 2019 - 2024. All rights reserved.