Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| MID Profile
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## java.util
Class Random

    java.lang.Object
      |
      +--java.util.Random

public class Random
extends Object

An instance of this class is used to generate a stream of pseudorandom numbers. The class uses a 48-bit seed, which is modified using a linear congruential formula. (See Donald Knuth, The Art of Computer Programming, Volume 2, Section 3.2.1.)

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.

Since:
  JDK1.0

Constructor Summary
`Random()` Creates a new random number generator.
`Random(long seed)` Creates a new random number generator using a single `long` seed:

Method Summary
`protected int` | `next(int bits)` Generates the next pseudorandom number.
`int` | `nextInt()` Returns the next pseudorandom, uniformly distributed `int` value from this random number generator's sequence.
`long` | `nextLong()` Returns the next pseudorandom, uniformly distributed `long` value from this random number generator's sequence.
`void` | `setSeed(long seed)` Sets the seed of this random number generator using a single `long` seed.

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### Random

    public Random()

  Creates a new random number generator. Its seed is initialized to a value based on the current time:

  >      public Random() { this(System.currentTimeMillis()); }

  See Also:
    `System.currentTimeMillis()`

### Random

    public Random(long seed)

  Creates a new random number generator using a single `long` seed:

  >      public Random(long seed) { setSeed(seed); }

  Used by method `next` to hold the state of the pseudorandom number generator.
  Parameters:
    `seed` - the initial seed.
  See Also:
    `setSeed(long)`

Method Detail

### setSeed

    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 as follows:

  >      synchronized public void setSeed(long seed) {
  >            this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
  >      }

  The implementation of `setSeed` by class `Random` happens to use only 48 bits of the given seed. In general, however, an overriding method may use all 64 bits of the long argument as a seed value.
  Parameters:
    `seed` - the initial seed.

### next

    protected int next(int bits)

  Generates the next pseudorandom number. Subclass should override this, as this is used by all other methods.

  The general contract of `next` is that it returns an `int` value and if the argument bits is between `1` and `32` (inclusive), then that many low-order bits of the returned value will be (approximately) independently chosen bit values, each of which is (approximately) equally likely to be `0` or `1`. The method `next` is implemented by class `Random` as follows:

  >      synchronized protected int next(int bits) {
  >            seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
  >            return (int)(seed >>> (48 - bits));
  >      }

  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 2: Seminumerical Algorithms, section 3.2.1.
  Parameters:
    `bits` - random bits
  Returns:
    the next pseudorandom value from this random number generator's sequence.
  Since:
    JDK1.1

### nextInt

    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 `nextInt` is implemented by class `Random` as follows:

  >      public int nextInt() {  return next(32); }

  Returns:
    the next pseudorandom, uniformly distributed `int` value from this random number generator's sequence.

### nextLong

    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. All 264 possible `long` values are produced with (approximately) equal probability. The method `nextLong` is implemented by class `Random` as follows:

  >      public long nextLong() {
  >            return ((long)next(32) << 32) + next(32);
  >      }

  Returns:
    the next pseudorandom, uniformly distributed `long` value from this random number generator's sequence.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| MID Profile
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Submit a comment or suggestion Version 0.95 of MID Profile Specification
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries. Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,Palo Alto, California, 94303, U.S.A. All Rights Reserved.