Jak wymieszać elementy tablicy jednowymiarowej?

0

Witam napisałem kod, który tworzy jednowymiarową tablicę o losowo wybranym rozmiarze od 10 do 15 oraz wypełnia ją kolejnymi elementami zaczynając od 0 . Moim kolejnym zadaniem jest wymieszać jej wszystkie elementy, lecz nie potrafię tego zrobić. Ktoś pomoże?

Kod:



public class elo320 {
    public static void main(String[] args) {
        int[] tab = new int[10 + (int)(Math.random() * 6)];
        System.out.println("długość tablicy = " +tab.length);
        int wrt = 0;
        for(int i = 0; i < tab.length; i++){
            tab[i] = wrt;
            wrt++;
            System.out.println(tab[i]);
        }
        System.out.println("------------------------");
            ```
0

Myślę że takie coś byłoby najprostsze:

for(int i = 0; i < tab.length; i++){
            tab[i] = tab[(int)(Math.random() * tab.length)]
        }
1
        int[] input = { 1, 2, 3 };

        List<Integer> tmp = IntStream.of(input)
                .mapToObj(Integer::valueOf)
                .collect(Collectors.toList());

       // Lub List<Integer> tmp = Arrays.asList(1, 2, 3);

        Collections.shuffle(tmp);

        int[] result = tmp.stream()
                .mapToInt(i->i)
                .toArray();

        for (int i : result) {
            System.out.println(i);
        }

Oficjalny algo jest natomiast taki:

for i in 0..array.length-1 {
  int rnd = randomNumberBetween(i, array.length); 
  swap array[i], array[rnd]
}

0

Ok dzięki za odpowiedzi, a da się to może zrobić wykorzystując tylko pętle i tablice, bez kolekcji?

0

Ale tablica to kolekcja. No to chyba sie nie da :D

A tak na powaznie to @0xmarcin przeciez podal rozwiazanie w drugim snippecie.

0
stivens napisał(a):

Ale tablica to kolekcja

Tablica nie implementuje interfejsu Collection

1

@pawelo__:

Taki tip uniwersalny, przy takich trywialnych problemach szybciej zamiast pisać post jest użyć google wg wzorca:

{co z zrobić} {z jakimś obiektem} {w danym języku}

tu będzie to

shuffle array java

nie musisz się przejmować kolejnością ani poprawnością gramatyczną

8

Spokojnie, ogarnąłem jak wymieszać tę kolejność

    public static void main(String[] args) {
        int[] tab = new int[10 + (int) (Math.random() * 6)];
        System.out.println("długość tablicy = " + tab.length);
        int wrt = 0;
        for (int i = 0; i < tab.length; i++) {
            tab[i] = wrt;
            wrt++;
            System.out.println(tab[i]);
        }

        System.out.println("------------------------");

        int[] shuffled;

        // Rzucałem kośćmi k6, k10 i monetami żeby wylosować kolejność
        // na pewno jest losowo
        if (tab.length == 10) {
            shuffled = new int[]{tab[6], tab[7], tab[9], tab[0], tab[2], tab[3], tab[4], tab[8], tab[1], tab[5]}; 
        } else if (tab.length == 11) {
            shuffled = new int[]{tab[6], tab[3], tab[0], tab[1], tab[9], tab[5], tab[10], tab[2], tab[4], tab[7], tab[8]};
        } else if (tab.length == 12) {
            shuffled = new int[]{tab[7], tab[9], tab[6], tab[8], tab[4], tab[1], tab[2], tab[0], tab[5], tab[11], tab[10], tab[3]};
        } else if (tab.length == 13) {
            shuffled = new int[]{tab[8], tab[7], tab[10], tab[1], tab[9], tab[4], tab[3], tab[0], tab[5], tab[12], tab[2], tab[6], tab[11]};
        } else if (tab.length == 14) {
            shuffled = new int[]{tab[2], tab[0], tab[10], tab[12], tab[13], tab[6], tab[8], tab[9], tab[3], tab[11], tab[4], tab[7], tab[1], tab[5]};
        } else if (tab.length == 15) {
            shuffled = new int[]{tab[13], tab[0], tab[2], tab[11], tab[5], tab[14], tab[6], tab[9], tab[8], tab[4], tab[7], tab[1], tab[3], tab[10], tab[12]};
        } else {
            throw new IllegalArgumentException();
        }

        System.out.println(Arrays.toString(shuffled));
    }
0

@wartek01: Napisz kalkulator.

1 użytkowników online, w tym zalogowanych: 0, gości: 1