Java: Random Numbers - shuffling
A standard approach to shuffling the elements of an array is to write some
code as described below. However, as of Java 2 the java.util.Collections
class contains a static shuffle(list) method, but this
doesn't work with arrays, only Lists (eg, ArrayList).
Shuffling: Random numbers without replacement
The random number methods
generate numbers with replacement. This means that a particular
random number may be generated repeatedly.
If you don't want the
same numbers to be repeated, you need to put the values (numbers, strings, objects, ...)
in an array, then shuffle the array by randomly exchanging the array elements.
The example below shows how to produce the values from 0 to 51
in a random order with no repetition.
Example: Shuffling
A common problem is to shuffle (to randomly rearrange) the elements of an array.
Here is how to do that.
Random rgen = new Random(); // Random number generator
int[] cards = new int[52];
//--- Initialize the array to the ints 0-51
for (int i=0; i<52; i++) {
cards[i] = i;
}
//--- Shuffle by exchanging each element randomly
for (int i=0; i<52; i++) {
int randomPosition = rgen.nextInt(52);
int temp = cards[i];
cards[i] = card[randomPosition];
cards[randomPosition] = temp;
}
java.util.Collections.shuffle(...)
Java 2 offers nice classes for handling data structures,
the so-called "Collections" classes, however most of these do not work on
simple arrays of primitive values. If your data is already in
one of the collections classes, eg, ArrayList, then you can use the
java.util.Collections.shuffle() method.
Arrays of objects can easily be converted to ArrayLists
by using the java.util.Arrays.asList(. . .) method.
Related pages
Random numbers - intro,
Random numbers - API