Random numbers

Random numbers are extremely useful and important. They are used in almost every game to set chances of things happening (think dice rolls, etc), as well as in cryptography.

As in many things in Java, there is more than one way to make random numbers.

Method 1: use Math.random

	double d = Math.random();		//this does the standard thing and returns a double between 0 and 0.99999
	int r = (int)(Math.random() * n) + 1;  //this makes random integers from 1 to n

How it works:

Method 2: make a Random object

	import java.util.Random;
	Random randGen = new Random();		//DO NOT make a new randGen for each number.
	int r1 = randGen.nextInt();		//any valid integer (i.e. from  -2,147,483,648 to 2,147,483,647)
	int r2 = randGen.nextInt( n );		// any integer from 0 to n-1
	int r2 = randGen.nextInt(100) +1;	// an integer from 1 to 100
	double r3 = randGen.nextDouble();	//this does the standard thing and returns a double between 0 and 0.99999.
	
	//once you've created your Random object (randGen) and your r2 variable,
	//each time you want a new random number, just type
	r2 = randGen.nextInt(100) +1

Method 3:

For super random numbers, use java.security.SecureRandom. It's good to know this if you need to do anything involving securely transmitting information over the internet.

Summary

Neither method gives you random integers between n1 and n2.
Neither method gives you random integers spaced out, e.g. random multiples of 3 between 1 and 100.
For both of these situations you have to do the math yourself.

I use Math.random() because it's shorter: int rand = (int)(Math.random() * 10) + 1;

Here's the identical code for util.Random, which a lot of people still use:
import java.util.Random; Random randgen = new Random(); int rand = randGen.nextInt(10) + 1;