FileDocCategorySizeDatePackage
Randomizer.javaAPI DocExample1952Wed Jun 03 10:32:26 BST 1998None

Randomizer.java

// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples

/**
 * This class defines methods for computing pseudo-random numbers, and it defines
 * the state variable that needs to be maintained for use by those methods.
 **/
public class Randomizer {
  // Carefully chosen constants from the book "Numerical Recipes in C".
  // All "static final" fields are constants.
  static final int m = 233280;
  static final int a = 9301;
  static final int c = 49297;

  // The state variable maintained by each Randomizer instance
  long seed = 1;
  
  /** 
   * The constructor for the Randomizer() class.  It must be passed some
   * arbitrary initial value or "seed" for its pseudo-randomness.
   **/
  public Randomizer(long seed) { this.seed = seed; }

  /**
   * This method computes a pseudo-random number between 0 and 1 using a very
   * simple algorithm.  Math.random() and java.util.Random are actually a lot
   * better at computing randomness.
   **/
  public float randomFloat() {
    seed = (seed * a + c) % m;
    return (float)seed/(float)m;
  }

  /** 
   * This method computes a pseudo-random integer between 0 and specified
   * maximum.  It uses randomFloat() above.
   **/
  public int randomInt(int max) {
    return Math.round(max * randomFloat());
  }

  /**
   * This nested class is a simple test program: it prints 10 random integers.
   * Note how the Randomizer object is seeded using the current time.
   **/
  public static class Test {
    public static void main(String[] args) {
      Randomizer r = new Randomizer(new java.util.Date().getTime());
      for(int i = 0; i < 10; i++) System.out.println(r.randomInt(100));
    }
  }
}