Visual Basic .NET Language
Losowy
Szukaj…
Wprowadzenie
Klasa Random służy do generowania nieujemnych liczb całkowitych pseudolosowych, które nie są tak naprawdę losowe, ale są wystarczająco ogólne do ogólnych celów.
Sekwencję oblicza liczbę początkowego (zwanego nasion) w poprzednich wersjach NET, liczba nasion była taka sama przy każdym aplikacji był wykonywany. Stało się tak, że za każdym razem, gdy aplikacja zostanie uruchomiona, otrzymasz tę samą sekwencję liczb pseudolosowych. Teraz ziarno zależy od czasu deklarowania obiektu.
Uwagi
Na koniec uwaga na temat randomizacji. Jak wspomniano wcześniej, kiedy zadeklarujesz instancję Random
bez żadnych parametrów, konstruktor wykorzysta bieżący czas jako część obliczeń do utworzenia początkowej liczby początkowej. Zwykle jest to OK.
Jednak. Jeśli ponownie zadeklarujesz nowe wystąpienia w bardzo krótkim czasie, za każdym razem, gdy zostanie obliczona liczba zarodków, czas może być taki sam. Rozważ ten kod.
For i As Integer = 1 To 100000
Dim rnd As New Random
x = rnd.Next
Next
Ponieważ komputery są obecnie bardzo szybkie, uruchomienie tego kodu zajmuje ułamek sekundy, a po kilku sekwencjach iteracji pętli czas systemowy się nie zmieni. Liczba nasion nie zmieni się, a liczba losowa będzie taka sama. Jeśli chcesz wygenerować wiele liczb losowych, zadeklaruj wystąpienie liczby losowej poza pętlą w tym prostym przykładzie.
Dim rnd As New Random
For i As Integer = 1 To 100000
x = rnd.Next
Next
Podstawowa zasada nie polega na ponownym tworzeniu generatora liczb losowych w krótkich okresach czasu.
Deklarowanie instancji
Dim rng As New Random()
To deklaruje instancję klasy Random o nazwie rng
. W takim przypadku bieżący czas w punkcie, w którym obiekt jest tworzony, jest używany do obliczania nasion. Jest to najczęstsze użycie, ale ma swoje własne problemy, co zobaczymy później w uwagach
Zamiast zezwalać programowi na wykorzystanie bieżącego czasu jako części obliczenia początkowego numeru nasion, można podać początkowy numer nasion. Może to być dowolny 32-bitowy literał całkowity, stały lub zmienny. Przykłady poniżej. Oznacza to, że instancja wygeneruje tę samą sekwencję liczb pseudolosowych, co może być przydatne w niektórych sytuacjach.
Dim rng As New Random(43352)
lub
Dim rng As New Random(x)
gdzie x
zostało zadeklarowane gdzie indziej w twoim programie jako stała lub zmienna Integer.
Wygeneruj losową liczbę z instancji Random
W poniższym przykładzie zadeklarowano nową instancję klasy Random, a następnie użyto metody .Next
do wygenerowania następnej liczby w sekwencji liczb pseudolosowych.
Dim rnd As New Random
Dim x As Integer
x = rnd.Next
Ostatnia linia powyżej wygeneruje kolejną liczbę pseudolosową i przypisze ją do x
. Liczba będzie zawierać się w przedziale od 0 do 2147483647. Można jednak również określić zakres liczb, które mają być generowane, jak w poniższym przykładzie.
x = rnd.Next(15, 200)
Należy jednak pamiętać, że przy użyciu tych parametrów zakres liczb będzie wynosił między 15 lub więcej a 199 lub mniej.
Możesz również wygenerować liczby zmiennoprzecinkowe typu Double, używając .NextDouble
np
Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()
Nie można jednak określić zakresu tego. Zawsze będzie w zakresie od 0,0 do mniej niż 1,0.