Random Numbers in java

This little program illustrates techniques for working with random numbers in Java. The program consists of a class called RandomNumbersDemo.

To create the tutorial in NetBeans, create an empty project and add a class called RandomNumbersDemo, then paste in the code below.

/**
 * Random Numbers in Java
 * nicomp
 * Graphical Network Programming
 *
 * Concepts: "seed", pseudo-random, simulation
 */

package randomnumbers;
import java.util.Random;        // The Random numnber generator class

/**
 * Random numbers are a useful tool for simulations and also for testing.
 * We don't want the numbers to be too random: the sequences must be reproducable.
 * http://docs.rinet.ru/JavDev/ch34.htm
 * @author Nicholson.Bill
 */
public class RandomNumbersDemo {
    static final int numberCount = 1000000;

    static void RunDemo() {
        int i; long sum;
        System.out.println("RandomNumbersDemo.Demo():");

//      Each instance of the Random class is a random number generator.
//      Numbers are uniformly distributed over the range of java integers.
        Random myRandom = new Random(); // Don't override the seed.

        System.out.println("10 random numbers");
        for (i = 0; i < 10; i++) {
            System.out.println(myRandom.nextInt());
        }
        sum = 0;
        for (i = 0; i < numberCount; i++) {
            sum += myRandom.nextInt();
        }
        System.out.println("The average of " + numberCount + " random numbers is " +  sum / numberCount);

//      ========================================================================
//      = Declare and instantiate a random number object with a specific seed.
//      = The seed provides us with repeatability.
//      ========================================================================
        Random myRandomWithSeed = new Random();
        int j;
        System.out.println("Calculating the averages from 10 random number sequences that start with the same seed.");
        for (j = 0; j < 10; j++) {
            sum = 0;
            myRandomWithSeed = new Random(42);
//          myRandomWithSeed.setSeed(42);   // Reset the generator to a known state.
            for (i = 0; i < numberCount; i++) {
                sum += myRandomWithSeed.nextInt();
            }
//          This calculated average should *never* change. Why?
            System.out.println("The average of " + numberCount + " random numbers is " +  sum / numberCount);
        }

//      Floating point numbers can also be generated.
        float floatingPointSum = 0, max = 0, min = 1, num;
        for (i = 0; i < numberCount; i++) {
            num = myRandom.nextFloat();
            if (max < num) max = num;
            if (min > num) min = num;
            floatingPointSum += num;
        }
        
//      We can also pass an upper limit to the generate method in the random class
//       to obtain a number in a specific range.
//      The range for this example is between 0 and 41, inclusive.
        myRandom.nextInt(42);   // Upper limit is 42 - 1

//      The floating point range is zero 0 to almost 1. That's very useful. Why?
        System.out.println("The average of " + numberCount + " floating point random numbers is " +  floatingPointSum / numberCount);
        System.out.println("The max is " + max );
        System.out.println("The min is " + min );


//      Just out of curiousity, let's see if we ever get a 1. Does it go as high as 1?
        System.out.println("Looking for a randomly generated floatig point 1.0 ...");
        float counter = 0;  // a float counter?
        while (true) {
            counter++;
            if ((counter % 100000000)== 0) {
                System.out.print(".");
                counter = 0;
            }
            num = myRandom.nextFloat();
            if (num == 1.0) {System.out.println(counter + " iterations required"); break;}
        }
        System.out.println("We found a 1.");

        System.out.println("Method Finished");

    }
}


More by this Author


Comments

No comments yet.

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    Click to Rate This Article
    working