## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# Generating Better Random Numbers

## Problem

You need to generate better random numbers.

## Solution

Construct a `java.util.Random` object (not just any old random object) and call its `next*( )` methods. These methods include `nextBoolean( )`, `nextBytes( )` (which fills the given array of bytes with random values), `nextDouble( )`, `nextFloat( )`, `nextInt( )`, `nextLong( )`. Don’t be confused by the capitalization of `Float`, `Double`, etc. They return the primitive types `boolean`, `float`, `double`, etc., not the capitalized wrapper objects. Clear enough? Maybe an example will help:

```// Random2.java
// java.util.Random methods are non-static, do need to construct Math
Random r = new Random(  );
for (int i=0; i<10; i++)
System.out.println("A double from java.util.Random is " + r.nextDouble(  ));
for (int i=0; i<10; i++)
System.out.println("An integer from java.util.Random is " + r.nextInt(  ));```

You can also use the `java.util.Random` `nextGaussian( )` method, as shown next. The `nextDouble( )` methods try to give a “flat” distribution between and 1.0 in which each value has an equal chance of being selected. A Gaussian or normal distribution is a bell-curve of values from negative infinity to positive infinity, with the majority of the values around zero (0.0).

```// Random3.java
Random r = new Random(  );
for (int i=0; i<10; i++)
System.out.println("A gaussian random double is " + r.nextGaussian(  ));```

To illustrate the different distributions, I generated 10,000 numbers first using `nextRandom( )` and then using ...

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required