ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel
  • »
  • Technology»
  • Computers & Software

Random Numbers in java

Updated on May 1, 2009

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");

    }
}


Comments

    0 of 8192 characters used
    Post Comment

    No comments yet.

    Click to Rate This Article