这可能是比编程更多的数学问题.在JS我想要一个函数,在一个区间中返回一个随机整数,让我们说1-6,这就是我发现的:
// Returns a random integer between min and max
// Using Math.round() will give you a non-uniform distribution!
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Run Code Online (Sandbox Code Playgroud)
如果我将其复制并粘贴到我的代码中,我会感到内疚.我不明白这一点:为什么我们从最大值中减去min,加1,将答案乘以Math.random()然后加上min.我手动在纸上累了几个数字,它工作得很好!但我不明白为什么!
假设你已经理解了Math.floorand 的行为Math.random,这里是一步一步的其余部分:
Math.random()↝ 0(包括)和1(不包括)之间的随机数Math.random() * max↝ 0(包括)和max(不包括)之间的随机数Math.floor(Math.random() * max)↝ (incl.)和(excl.)之间的随机整数0maxMath.floor(Math.random() * (max - min)) + min↝ min(incl.)和max(excl.)之间的随机整数Math.floor(Math.random() * ((max + 1) - min)) + min↝ min(incl.)和max+1(excl.)之间的随机整数(OR之间min和之间max)