# Java Summary: Math.random() and java.util.Random

## `Math.random()` method

A standard way to generate random numbers is to use the `Math.random()` method, which returens a double value in the range 0.0 up to, but not including 1.0. You can used multiplication to expand the range, addition to shift the range, and casting to convert it to an integer. The advantage of this method over the Random class (see below) is that there is no need to create an object. The disadvantage is that you often have to do more work to translate the return value into a range you want.

     double Math.random()

Returns a number x in the range, 0.0 <= x < 1.0.

java.util.Random Class
The java.util.Random class provides more flexible ways to generate uniformly distributed random numbers, providing easy generation of types other than double, as well as providing a Gaussian distribution.
Random Constructors
Random r = | new Random(); | Uses time in milliseconds as the seed.
Random r = | new Random(long seed); | Uses the provided seed for testing purposes.
Random Methods
All methods return a uniform distribution of values, except `nextGaussian()`. Assume r is a Random object..
int i = | r.nextInt(int n) | Returns random int >= 0 and < n.
int i = | r.nextInt() | Returns random int (full range).
long l = | r.nextLong() | Returns random long (full range).
float f = | r.nextFloat() | Returns random float >=0.0 and < 1.0.
double d = | r.nextDouble() | Returns random double >=0.0 and < 1.0.
boolean b = | r.nextBoolean() | Returns random boolean (true or false).
double d = | r.nextGaussian() | Returns random double with mean 0.0 and standard deviation 1.0.

Copyright 2005 Fred Swartz