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]