Randomizer.java Source code

Java tutorial

Introduction

Here is the source code for Randomizer.java

Source

/*
 * Copyright (c) 2000 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 2nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book (recommended),
 * visit http://www.davidflanagan.com/javaexamples2.
 */

/**
 * This class defines methods for computing pseudo-random numbers, and 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
    int seed = 1;

    /**
     * The constructor for the Randomizer() class. It must be passed some
     * arbitrary initial value or "seed" for its pseudo-randomness.
     */
    public Randomizer(int 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) Math.abs((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 ints.
     * Note how the Randomizer object is seeded using the current time.
     */
    public static void main(String[] args) {
        Randomizer r = new Randomizer((int) new java.util.Date().getTime());
        for (int i = 0; i < 10; i++)
            System.out.println(r.randomInt(100));

    }
}