Usuwanie duplikatów losowych liczb

0

Cześć. Chcę zapełnić tablicę liczbami pseudolosowymi, ale tak, żeby nie było w niej duplikatów. Nie mam pojęcia czemu program nigdy nie chcę wejść do pierwszego warunku if'a. Proszę o pomoc.

            Random losowa = new Random();
            int[] tablica; tablica = new int[6];
            bool exit;

            for (int i = 0; i < tablica.Length; i++)
            {
                exit = false;
                tablica[i] = losowa.Next(1, 10);

                while (!exit) //excluding the possibility of 2 the same numbers
                {
                    for (int j = 0; j < tablica.Length; j++)
                    {
                        if (tablica[i] == tablica[j] && i != j) tablica[i] = losowa.Next(1, 10);
                        else exit = true;
                    }
                }
0

Spróbuj tak:

Random losowa = new Random();
var lista = new List<int>();
int size = 6;

for (int i=0; i<size; i++)
{
    int losowa_wartosc;
    do
    {
        losowa_wartosc = losowa.Next(1, 10);
    } while (lista.Contains(losowa_wartosc));

    lista.Add(losowa_wartosc);
}

@Joff3R: A jednak nie :P

Masz takie liczby w tablicy 1,2,3

Teraz wylosowałeś liczbę 1 na index i=3, ale 1 już istnieje na indexie 0, więc losujesz i znów wypada 1 i zostaje ona na indexie 3.
Pętla leci dalej do końca i wychodzi, bo exit = true

Możesz dać w tym ifie sprawdzenie na liczbę przed wylosowaniem i po, a na końcu wyświetlić wszystkie wartości i sprawdzić czy są dwie takie same

1

@WeiXiao: albo jeszcze prościej (od czego mamy sety :)):

var random = new Random();
var numbers = new HashSet<int>();
const int limit = 6;

while (numbers.Count < limit) {
    numbers.Add(random.Next(1, 10));
}

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