# Random Generators

Of course, it's impossible for a computer to do anything that is **truly** random. By its very nature a computer is repeatable in everything that it does. Random number generators on a computer work essentially by performing a calculation so complicated that the result cannot be predicted from the input. A well-designed random number generator can produce a sequence of numbers that are evenly distributed through the possible range and indistinguishable from, say, rolling a dice or flipping a coin.### 1. Creating and using random number generators

Getting random numbers involves two steps. First, you create a **generator**, an object that produces random numbers, telling it what range of numbers it should supply. Then, you ask that generator for its next value whenever you need a new random number.

There are two types of random number generators: one for `int`

s and one for `double`

s:

public RandomIntGenerator(int min, int max)

public RandomDoubleGenerator(double min, double max)

A generator created in this way will then be able to produce numbers just in that range, where the smallest number it can produce is `min`

and the largest is `max`

. So, if I wanted to make a random number generator to simulate a typical six-sided die, I would do this:

RandomIntGenerator die = new RandomNumberGenerator(1, 6);

Both generators have a method `nextValue()`

that returns the next value from the generator. This of course returns an `int`

or a `double`

depending on the type of the generator. If I wanted to roll two dice and add up the sum, I could do this:

int sum die.nextValue() + die.nextValue();