2009-09-29 13 views
20

Czy szukam za daleko, aby zobaczyć coś tak prostego, jak wybrać numer: 0 lub 1?Losowa liczba: 0 lub 1

 Random rand = new Random(); 

     if (rand.NextDouble() == 0) 
     { 
      lnkEvents.CssClass = "selected"; 
     } 
     else 
     { 
      lnkNews.CssClass = "selected"; 
     } 
+5

Wszystkie poniższe rozwiązania, czy stworzyłeś nowy obiekt losowy. To dobrze, chyba że szybko stworzysz ich grupę. Jeśli to zrobisz, istnieje spora szansa, że ​​wszyscy będą mieli to samo losowe nasienie, a otrzymasz taki sam wynik w kółko. Aby uniknąć problemu, utwórz losowo gdzieś w swoim programie i przekaż go. –

+0

NextDouble nie istnieje w losowej klasie –

Odpowiedz

71
Random rand = new Random(); 

if (rand.Next(0, 2) == 0) 
    lnkEvents.CssClass = "selected"; 
else 
    lnkNews.CssClass = "selected"; 

Random.Next wybiera losowo liczbę całkowitą pomiędzy dolną granicą (włącznie), a górna granica (wyłącznie).

+0

To jest ten, który chciałbym wybrać. – RichardOD

+8

Uwaga: Random rand = new Random(); powinien, najlepiej, utknąć gdzieś indziej, a nie tuż nad call do rand. Dalej. Najlepiej byłoby, gdyby zostało ono zainicjalizowane jeden raz. – Brian

26

Jeśli chcesz 50/50 prawdopodobieństwo, proponuję:

Random rand = new Random(); 

if (rand.NextDouble() >= 0.5) 
    lnkEvents.CssClass = "selected"; 
else 
    lnkNews.CssClass = "selected"; 
+0

Yeap - obecnie prawdopodobieństwo jest znacznie mniejsze. :-). – RichardOD

+2

Czy osoba zainteresowana powinna dodać komentarz. Dzięki. –

2

Random.NextDouble() będzie wybrać dowolną liczbę od 0 podwójne, ale mniej niż 1,0. Większość z tych liczb nie ma zera, więc twoja dystrybucja nie będzie tak wyrównana, jak oczekujesz.

+6

"nie być tak równomierny, jak można się spodziewać" jest niedopowiedzeniem roku. Praktycznie wszystkie wygenerowane wyniki byłyby 1. – Godeke

+1

Dla przypomnienia: Nigdy nie widziałem zerowego zwracanego przez PRNG. I wypróbowałem ich wiele miesięcy temu :-) – Joey

3

Wygląda na to, że to, co chcesz zrobić (wybierz między dwiema wartościami), jest wyraźniej wyrażone za pomocą metody Next, zamiast metody NextDouble.

const int ExclusiveUpperBound = 2; 
if (new Random().Next(ExclusiveUpperBound) == 0) 

Wartość wytworzonych „większe niż lub równe zeru, a mniej niż” ExclusiveUpperBound.

Powiązane problemy