[C#] Wielokrotne losowanie liczby


(Krzkaczor) #1

Hej!

Zastanawiam się czy w dobry sposób losuje liczby (tzn. czy nie jest obniżona w jakiś dziwny sposób losowość wyników). Globalna zmienna

public static System.Random Random = new System.Random(DateTime.Now.Millisecond);

I potem tylko w kodzie

V.Random.Next(9)

V to obiekt klasy. Czy to jest w porządku i liczby faktycznie będą (pseudo)losowe?


(Tomek Matz) #2

Dobrze. Problem pojawiłby się dopiero wtedy, gdyby to nie była zmienna statyczna i używałbyś domyślnego konstruktora.


(Krzkaczor) #3

Dzięki za odpowiedź :slight_smile: a mógłbyś rozwinąć tą myśl z domyślnym konstruktorem? Chodzi o to że właściwość była by więcej niż raz inicjowana?


(Tomek Matz) #4

Z domyślnym konstruktorem chodzi o to, że algorytm generujący liczby zostałby zainicjalizowany tą samą wartością, jeśli dwa obiekty Random, zostałyby utworzone jeden po drugim w niewielkim odstępie czasu. W efekcie spowodowałoby to, że dla tych dwóch różnych obiektów Random, losowane byłyby te same liczby. Jest to wyjaśnione na stronie msdn (jest nawet przykład) http://msdn.microsoft.com/en-us/library/system.random.aspx. Jeśli dwa obiekty Random zostałyby utworzone przy użyciu domyślnego konstruktora w dłuższym odstępie czasu, to nie byłoby takiego problemu. Niemniej i tak najlepszym rozwiązaniem (również ze względów wydajnościowych) jest zmienna statyczna, co zresztą jest wyraźnie na tej stronie zaznaczone:


(Krzkaczor) #5

Ok,racja. Dzięki za pomoc :slight_smile: