| public class java.util Random
|
Java SE 6 |
If two instances of Random are created with the same
seed, and the same sequence of method calls is made for each, they
will generate and return identical sequences of numbers. In order to
guarantee this property, particular algorithms are specified for the
class Random. Java implementations must use all the algorithms
shown here for the class Random, for the sake of absolute
portability of Java code. However, subclasses of class Random
are permitted to use other algorithms, so long as they adhere to the
general contracts for all the methods.
The algorithms implemented by class Random use a
protected utility method that on each invocation can supply
up to 32 pseudorandomly generated bits.
Many applications will find the method Math#random simpler to use.
| version | 1.47, 02/07/06 |
| since | 1.0 |
| Constructors | |||||
|---|---|---|---|---|---|
| public | Random() Creates a new random number generator. This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor. | ||||
| public | Random(long seed) Creates a new random number generator using a single long seed.
The seed is the initial value of the internal state of the pseudorandom
number generator which is maintained by method #next.
The invocation
| ||||
| Methods | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| protected int | next(int bits) Generates the next pseudorandom number. Subclasses should override this, as this is used by all other methods. The general contract of
and returning
This is a linear congruential pseudorandom number generator, as
defined by D. H. Lehmer and described by Donald E. Knuth in
The Art of Computer Programming, Volume 3:
Seminumerical Algorithms, section 3.2.1.
| ||||||||
| public boolean | nextBoolean() Returns the next pseudorandom, uniformly distributed boolean value from this random number generator's
sequence. The general contract of nextBoolean is that one
boolean value is pseudorandomly generated and returned. The
values true and false are produced with
(approximately) equal probability.
The method
| ||||||||
| public void | nextBytes(byte[] bytes) Generates random bytes and places them into a user-supplied byte array. The number of random bytes produced is equal to the length of the byte array. The method
| ||||||||
| public double | nextDouble() Returns the next pseudorandom, uniformly distributed double value between 0.0 and
1.0 from this random number generator's sequence.
The general contract of The method
The hedge "approximately" is used in the foregoing description only
because the [In early versions of Java, the result was incorrectly calculated as:
This might seem to be equivalent, if not better, but in fact it
introduced a large nonuniformity because of the bias in the rounding
of floating-point numbers: it was three times as likely that the
low-order bit of the significand would be 0 than that it would be 1!
This nonuniformity probably doesn't matter much in practice, but we
strive for perfection.]
| ||||||||
| public float | nextFloat() Returns the next pseudorandom, uniformly distributed float
value between 0.0 and 1.0 from this random
number generator's sequence.
The general contract of The method
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 [In early versions of Java, the result was incorrectly calculated as:
This might seem to be equivalent, if not better, but in fact it
introduced a slight nonuniformity because of the bias in the rounding
of floating-point numbers: it was slightly more likely that the
low-order bit of the significand would be 0 than that it would be 1.]
| ||||||||
| public double | nextGaussian() Returns the next pseudorandom, Gaussian ("normally") distributed double value with mean 0.0 and standard
deviation 1.0 from this random number generator's sequence.
The general contract of The method
This uses the polar method of G. E. P. Box, M. E. Muller, and
G. Marsaglia, as described by Donald E. Knuth in The Art of
Computer Programming, Volume 3: Seminumerical Algorithms,
section 3.4.1, subsection C, algorithm P. Note that it generates two
independent values at the cost of only one call to StrictMath.log
and one call to StrictMath.sqrt.
| ||||||||
| public int | nextInt() Returns the next pseudorandom, uniformly distributed int
value from this random number generator's sequence. The general
contract of nextInt is that one int value is
pseudorandomly generated and returned. All 232
possible int values are produced with
(approximately) equal probability.
The method
| ||||||||
| public int | nextInt(int n) Returns a pseudorandom, uniformly distributed int value
between 0 (inclusive) and the specified value (exclusive), drawn from
this random number generator's sequence. The general contract of
nextInt is that one int value in the specified range
is pseudorandomly generated and returned. All n possible
int values are produced with (approximately) equal
probability. The method nextInt(int n) is implemented by
class Random as if by:
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 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.
| ||||||||
| public long | nextLong() Returns the next pseudorandom, uniformly distributed long
value from this random number generator's sequence. The general
contract of nextLong is that one long value is
pseudorandomly generated and returned.
The method
Because class Random uses a seed with only 48 bits,
this algorithm will not return all possible long values.
| ||||||||
| Properties | |||
|---|---|---|---|
| public void | setSeed(long seed) Sets the seed of this random number generator using a single long seed. The general contract of setSeed is
that it alters the state of this random number generator object
so as to be in exactly the same state as if it had just been
created with the argument seed as a seed. The method
setSeed is implemented by class Random by
atomically updating the seed to
and clearing the haveNextNextGaussian flag used by #nextGaussian.
The implementation of
| ||
| About DocWeb · Bundles · Export · Export All | Top 10 · Statistics · Login |
| About Sun · Contact · Privacy · Terms of Use · Trademarks | Java SE 6 · Copyright © 1994-2009 Sun Microsystems, Inc.All rights reserved. Use is subject to license terms |
![]() |
![]() |
|