我将从定义接下来的两个辅助函数开始,然后使用它们来获取值。这些方法是您对B案例的定义。
int nextInt(int min, int max) {
return Math.floor(Math.random() * (max - min)) + min;
}
float nextFloat(float min, float max) {
return Math.random() * (max - min) + min;
}
然后为整数
- 答:返回nextInt(分钟+ 1,最多);
- B:return nextInt(min,max);
- C:return nextInt(min + 1,max + 1);
- D:return nextInt(min,max + 1);
浮动是一个更复杂的情况。有些人可能会争辩说,终点是否包含在内没有太大的区别 - 尤其是可以使用开放式解决方案而不是关闭 - 因为终点很少被选中。但是由于完全可能实现所有场景,我认为数据如何可以完成。
答:在这种情况下,我们可以简单的确保非法值再次卷起:
float f;
do {
f = nextFloat(min, max);
} while (f == min);
return f;
B:
return nextFloat(min, max);
C:在这里,我们只需切换端点
float f = nextFloat(min, max);
if (f == min) {
return max;
}
return f;
d:这是所有的最复杂的情况,但可以如下实现:
float f = nextFloat(min, max);
if (f == min) {
return max;
}
return nextFloat(min, max);
的情况下,A和d是在这个意义上有点脏,他们可能需要产生一个以上随机数,这可能是一些特定情况下的问题。解决这个问题需要深入研究浮点的规范以寻找替代实现。此外,应该注意的是,在情况D中,最大值的可行性比任何其他数字具有稍高的可行性,如果所引用的函数是完全一致的(通常不是),但通常这仅仅是理论问题。 (具体而言,如果在该范围内有n个可能值,则最大值pmax = 1 /(n-1)的可行性和任何其他值的可行性是(1-pmax)/(n-1))。
应该注意到浮点事例A的精确实现中应该注意的一个小问题。函数的调用者有可能会用相邻的浮点调用它。通过对参数进行虚拟检查并不容易,所以为了安全起见,应该限制循环执行的次数。
我的引用来自[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random) – tgogos
我正在纠正 –
您的'float B'情况不起作用:在许多情况下,该公式将能够产生上限和下限。 –