在 Josh 给出的有缺陷的随机方法的示例中,该方法生成具有给定上限的正随机数n
,我不理解他所说的两个缺陷。
书中的方法是:
private static final Random rnd = new Random();
//Common but deeply flawed
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
- 他说,如果 n 是 2 的小幂,则生成的随机数序列将在短时间内重复。为什么会这样?的文档
Random.nextInt()
说Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence.
所以不应该是如果 n 是一个小整数那么序列会重复自己,为什么这只适用于 2 的幂? - 接下来他说,如果 n 不是 2 的幂,则平均而言,某些数字将比其他数字更频繁地返回。
Random.nextInt()
如果生成均匀分布的随机整数,为什么会发生这种情况?(他提供了一个代码片段,清楚地证明了这一点,但我不明白为什么会这样,以及这与 n 是 2 的幂有何关系)。