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

}
}

```

165

292

11