Aria

Losowanie bez zwracania (Java)

Gdy chcemy wylosować np. 6 liczb z 49, a wylosowane liczby nie mogą się powtarzać możemy użyć metody withoutReturn.

Metoda withoutReturn
/**
     * Zwraca tablicę k liczb wybraych losowo z tablicy od 1 do n liczb bez
     * zwracania (powtórzeń)
     * @param k      int - liczba wybieranych liczb
     * @param n      int - największa liczba
     * @param sorted boolean - określa czy wyjściowa tablica liczb będzie
     *               posortowana czy nie, <code>true</code> oznacza tablicę posortowaną, <code>false</code>
     *               oznacza tablicę nie sortowaną
     * @return int[] - tablica wybranych liczb
     */
    public static int[] withoutReturn(int k, int n, boolean sorted) {
        int[] wynik = new int[k];
        if (k > n) {
            System.out
                    .println("pierwsza liczba nie moze byc wieksza od drugiej");
        } else {
            int[] liczby = new int[n];
            for (int j = 0; j < liczby.length; j++) {
                liczby[j] = j + 1;
            }
            for (int i = 0; i < wynik.length; i++) {
                int l = (int) Math.floor(Math.random() * n);
                wynik[i] = liczby[l];
                liczby[l] = liczby[n - 1];
                n--;
            }
            if (sorted) {
                Arrays.sort(wynik);
            }
        }
        return wynik;
    }
Wynik

Po uruchomieniu metody otrzymujemy na przykład:

[2, 16, 25, 27, 34, 35]