java.util.Random.nextInt 的实现
此函数来自 java.util.Random
。它返回一个在 和 给定 之间均匀分布的伪随机数。不幸的是,我没有得到它。int
0
n
public int nextInt(int n) {
if (n <= 0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
return val;
}
我的问题是:
- 为什么它特别处理二的幂的情况?只是为了性能吗?
n
- 为什么它拒绝数字?
bits - val + (n-1) < 0