int java.util.
Random.nextInt(int n)
nextInt
public int nextInt(int n)
-
Returns a pseudorandom, uniformly distributed
intvalue between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. The general contract ofnextIntis that oneintvalue in the specified range is pseudorandomly generated and returned. Allnpossibleintvalues are produced with (approximately) equal probability. The methodnextInt(int n)is implemented by classRandomas if by: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; }The hedge "approximately" is used in the foregoing description only because the next method is only approximately an unbiased source of independently chosen bits. If it were a perfect source of randomly chosen bits, then the algorithm shown would choose
intvalues from the stated range with perfect uniformity.The algorithm is slightly tricky. It rejects values that would result in an uneven distribution (due to the fact that 2^31 is not divisible by n). The probability of a value being rejected depends on n. The worst case is n=2^30+1, for which the probability of a reject is 1/2, and the expected number of iterations before the loop terminates is 2.
The algorithm treats the case where n is a power of two specially: it returns the correct number of high-order bits from the underlying pseudo-random number generator. In the absence of special treatment, the correct number of low-order bits would be returned. Linear congruential pseudo-random number generators such as the one implemented by this class are known to have short periods in the sequence of values of their low-order bits. Thus, this special case greatly increases the length of the sequence of values returned by successive calls to this method if n is a small power of two.
-
-
-
Parameters:
-
n- the bound on the random number to be returned. Must be positive.
Returns:
-
the next pseudorandom, uniformly distributed
intvalue between0(inclusive) andn(exclusive) from this random number generator's sequence
Throws:
-
IllegalArgumentException- if n is not positive
Since:
- 1.2
-
本文详细介绍了 Java 中 java.util.Random 类的 nextInt(int n) 方法,该方法用于生成指定范围内的伪随机整数。文章解释了方法的实现原理,包括如何确保分布均匀性以及在 n 为 2 的幂时的特别处理。
1087

被折叠的 条评论
为什么被折叠?



