Liczby pseudolosowe bez powtórzeń

Odpowiedz Nowy wątek
2018-11-18 23:29
0

Witam, długo szukałem odpowiedzi na nurtujące mnie pytanie, ale nie mogę znaleźć tego na czym mi zależy. Mianowicie jak zrobić (najlepiej za pomocą tablic) aby liczby były losowane, ale nie mogły się powtarzać? Wrzucam kod, który jest błędny, ale może lepiej pokaże o co mi chodzi



public class RandomMaybe {
    public static void main(String[]args) {

    int[]board=new int[6];
    int[]hex=new int[6];

    for(int i=0; i<board.length; i++) {
        board[i]=(int)(Math.random()*49)+1;

    }

    hex[0]=board[0];
    hex[1]=board[1];
    hex[2]=board[2];
    hex[3]=board[3];
    hex[4]=board[4];
    hex[5]=board[5];

        for(int z=1; z<board.length; z++) {
            if(hex[z-1]==board[z]) {
                board[z]=(int)(Math.random()*48)+1;
            }
        }

        for(int w: board) {
            System.out.println(w);
        }
    }
  }

Pozostało 580 znaków

2018-11-19 04:12
Ciekawy
1

Może zainteresuj się zbiorami ( kolekcja Set ), tam wartości nie mogą się powtarzać i jest to szybko sprawdzane przy wstawianiu danych.

Dzięki, na pewno się zainteresuję ;) - Heros826 2018-11-19 19:31

Pozostało 580 znaków

2018-11-19 10:05
cs
1

Wypełnij tablicę kolejnymi liczbami np od 1 do 1000, a potem losuj dwa indeksy i zamieniaj miejscami liczby pod nimi, jak wymieszasz to masz tablicę liczb w losowej kolejności, ale żadna się nie powtarza, Twoje losowanie to pobieranie kolejnych liczb z tablicy

Ile takich zamian powinno się zrobić żeby tablica wyglądała na losową? - lubie_programowac 2018-11-19 11:19
Dzięki, za odpowiedź, jednak nie jestem pewny czy cię zrozumiałem, bo o ile dobrze myślę, to przecież jak wylosuje randomową ,,szufladkę", w której jest zapisana dana liczba, to nic nie stoi na przeszkodzie, aby wylosowało jeszcze raz tą ,,szufladkę". If you know what i mean ;) - Heros826 2018-11-19 19:38
Nie losujesz "szufladki", tylko bierzesz kolejną szufladkę - cs 2018-11-19 21:07
A rozumiem, dzięki - Heros826 2018-11-20 15:34

Pozostało 580 znaków

2018-11-19 11:22

Można to zrobić przy pomocy Collections.shuffle (kod jest bardzo poglądowy):

import java.util.Collections;
import java.util.List;

public class HelloWorld {

    public static void main(String[] args) {

        List<Integer> numbers = new ArrayList<>();

        for(int i = 0 ; i < 50 ; i++) {
            numbers.add(i);
        }

        Collections.shuffle(numbers);

        for(int element : numbers) {
            System.out.print(element+" ");
        }
    }
}
Dzięki, na pewno przyjrzę się dokumentacji java.util.Collections - Heros826 2018-11-19 19:31

Pozostało 580 znaków

2018-11-19 13:00
cs
0

Jest jeszcze, jak dobrze pamiętam, LFSR , który generuje losowy ciąg, których wartości w okresie się nie powtarzają.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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