# Java Notes

# Random Numbers - shuffling

A standard approach to shuffling the elements of an array is to write some
code as described below. As of Java 2 the `java.util.Collections`

class contains a static `shuffle(`

method, which
is described at the bottom.
*list*)

## 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, put the values (numbers, strings, objects, ...)
in an array, then shuffle the array by randomly exchanging each successive
array element with one of the remaining (including itself) 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.

int[] cards = new int[52]; // Represents a deck of cards. //... Initialize the array to the ints 0-51 for (int i=0; i<cards.length; i++) { cards[i] = i; } //... Shuffle by exchanging each element randomly with successive positions. for (int i=0; i < cards.length-1; i++) { // Choose a random position from here to the end. int randomPosition = i + (int) (Math.random() * (cards.length - i)); // Swap the two elements (could possibly be the same subscript). int temp = cards[i]; cards[i] = cards[randomPosition]; cards[randomPosition] = temp; }

## java.util.Collections.shuffle(...) for objects (not primitives)

Java has extensive classes for handling data structures,
the so-called "Collections" classes. These do not work on
simple arrays of primitive values as we have above. If your data is already in
one of the collections classes, eg, ArrayList, then you can easily use the
`java.util.Collections.shuffle()`

method.
Arrays of objects can be converted to ArrayLists
by using the `java.util.Arrays.asList(. . .)`

method.