Liczby pseudolosowe bez powtórzeń

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);
		}
	}
  }
1

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

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

1

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+" ");
        }
    }
}
0

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

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