function randomRange(myMin, myMax) {
return Math.floor(Math.random() * (myMax - myMin + 1)) +myMin;
}
我需要回顾一下return语句的作用。据我所知,它创建了一个范围,例如5 - 15.但我不知道为什么我从min中减去max并添加+ 1然后+ myMin。
答案 0 :(得分:1)
Math.random返回0到1之间的浮点数。例如,如果取1到10范围。然后Math.random将返回最小值0和最大值1然后乘以10-1 = 9。你得到0到9.但是当你加上最小值时,它会增加到1到10。
答案 1 :(得分:1)
但我不知道为什么我从min减去最大值并加上+ 1然后+ myMin。
首先请记住,Math.random()
会返回[0, 1)
范围内的值。
让我们从最后开始:
+ myMin
以确保结果大于或等于myMin
。
假设Math.random()
返回0
。然后Math.floor(...)
返回0
。如果我们没有+ myMin
,则返回结果将是0
而不是myMin
。
+ 1
以获取包含 myMax
的随机值。请注意,Math.random()
永远不会返回1
,只会返回1
附近的值。即除非我们添加Math.floor(Math.random() * myMax)
,否则myMax
永远不会是1
。
myMax - myMin
已完成,因为我们正在执行+ myMin
。我们必须考虑将结果增加myMin
。
假设Math.random()
返回0.5
,我们的范围为100 - 120
。没有- myMin
,我们会得到
Math.floor(0.5 * 120) + 100 = 60 + 100 = 160
这明显大于120
。如果我们加入- myMin
:
Math.floor(0.5 * (120 - 100)) + 100 = (0.5 * 20) + 100 = 110
我们得到的110
恰好在我们的范围中间(这是直观的,因为我们将0.5
作为随机值)。
答案 2 :(得分:1)
更正 - 它没有创建范围,它在给定的数字范围(最小和最大数字)之间生成一个随机整数。
E.g。 (5,15)=(min,max)
将导致数字介于此范围之间。
代码说明:
Math.floor(Math.random() * (myMax - myMin + 1)) +myMin;
假设max和min都是= 15
所以上面的内容如下:
Math.floor(Math.random()*(15 - 15 + 1))+ 15;
其等于= 15,因为0< = Math.random()*(1)< 1所以这个楼层是0.
如果你没有添加1,那么这个角落无效。
添加最小值以确保值保持在最小值和最大值之间