Random numbers

From Wikibooks, open books for an open world
Jump to: navigation, search

Large numbers Java Programming
Random numbers
Flow control
Navigate Language Fundamentals topic: v  d  e )

To generate random numbers the Math.random() method can be used, which returns a double, greater than or equal to 0.0 and less than 1.0.

The following code returns a random integer between n and m (where n <= randomNumber < m):


Computer code
int randomNumber = n + (int)(Math.random() * ( m - n ));


Alternatively, the java.util.Random class provides methods for generating random booleans, bytes, floats, ints, longs and 'Gaussians' (doubles from a normal distribution with mean 0.0 and standard deviation 1.0). For example, the following code is equivalent to that above:


Computer code
Random random = new Random();
  int randomNumber = n + random.nextInt(m - n);


Or:


Computer code
Random random = new Random();
  int randomNumber = random.nextInt(500); // this will return a pseudorandom int between 0 and 499


As an example using random numbers, we can make a program that uses a Random object to simulate flipping a coin 20 times:


Computer code
import java.util.Random;

public class CoinFlipper {

    public static void main(String[] args) {
        final int TIMES_TO_FLIP = 20; // The number of times to flip the coin
        int heads = 0;
        int tails = 0;
        Random random = new Random(); // create a Random object
        for (int i = 0; i < TIMES_TO_FLIP; i++) {
            int result = random.nextInt(2); // 0 or 1
            if (result == 1) {
                System.out.println("Heads");
                heads++;
            } else {
                System.out.println("Tails");
                tails++;
            }
        }
        System.out.println("There were " + heads + " heads and " + tails
                + " tails");
    }
}

which could create this output:

Heads
Tails
Tails
Tails
Heads
Tails
Heads
Heads
Heads
Heads
Heads
Heads
Tails
Tails
Tails
Tails
Heads
Tails
Tails
Tails
There were 9 heads and 11 tails

Of course, if you run the program you will probably get different results.

Both Math.random() and the Random class produce pseudorandom numbers. This is good enough for a lot of applications, but remember that it is not truly random. If you want a more secure random number generator, Java provides the java.security.SecureRandom package. What happens with Math.random() and the Random class is that a 'seed' is chosen from which the pseudorandom numbers are generated. SecureRandom increases the security to ensure that the seed which is used by the pseudorandom number generator is non-deterministic – that is, you cannot simply put the machine in the same state to get the same set of results. Once you have created a SecureRandom instance, you can use it in the same way as you can the Random class.

If you want truly random numbers, you can get a hardware random number generator or use a randomness generation service.


Large numbers Java Programming
Random numbers
Flow control
Personal tools
Namespaces

Variants
Actions
Navigation
Community
Toolbox
Sister projects
Print/export