
Mamy tablicę:
static final String[] IMIONA = {"Aria", "Bemol", "Gawot", "Menuet", "Misio", "Nutka", "Ochłapek", "Pauza", "Skirli", "Suita"};
Chcemy ja posortować (wymieszać) losowo.
Użyjemy trzech metod – u mnie są w klasie ArrayUtil:
/**
* miesza losowo elementy tablicy *
* @param tablica T[] - tablica do wymieszania
* @param prec - im wyższa liczba tym więcej operacji zamiany elementów miejscami
*/
static <T> void shuffleArray(T[] tablica, int prec) {
int len = tablica.length;
for (int i = 0; i < prec * len; i++) {
int one = randomInRange(0, len - 1);
int two = randomInRange(0, len - 1);
T temp = tablica[one];
tablica[one] = tablica[two];
tablica[two] = temp;
}
}
/**
* Podaje losową liczbę z przedziału zamkniętego <min, max> *
* @param min int - najmniejsza wartość
* @param max int - największa wartość
* @return int - wylosowana wartość z podanego zakresu, z uwzględniem min i
* max
*/
public static int randomInRange(int min, int max) {
int random = -1;
if (min > max) {
System.out.println("pierwsza liczba musi byc mniejsza od drugiej");
} else {
random = (int) (Math.floor(Math.random() * (max - min + 1)) + min);
}
return random;
}
/**
* Drukuje na konsoli w linii tablicę obiektów ujętą w klamry "[" "]". *
* @param array - tablicz obiektów do wydruku
*/
public static <T> void print(T[] array) {
System.out.print("[");
for (int i = 0; i < array.length; i++) {
if (i == array.length - 1) {
System.out.print(array[i]);
} else {
System.out.print(array[i] + ", ");
}
}
System.out.print("]");
System.out.println();
}
Wykonujemy mieszanie – ciagle mamy do czynienia z tą samą tablicą:
ArrayUtil.shuffleArray(IMIONA, 3); ArrayUtil.print(IMIONA);
Na konsoli zobaczymy wymieszaną tablicę. elementy ułożone są losowo:
[Gawot, Bemol, Pauza, Nutka, Suita, Skirli, Menuet, Aria, Misio, Ochłapek]
