Visual Basic .NET Language
Slumpmässig
Sök…
Introduktion
Slumpmässig klass används för att generera icke-negativa pseudo-slumpmässiga heltal som inte riktigt är slumpmässiga, men som för allmänna ändamål är tillräckligt nära.
Sekvensen beräknas med hjälp av ett initialt nummer (kallad frö ). I tidigare versioner av .net var detta utsädesnummer detsamma varje gång en applikation kördes. Så vad som skulle hända var att du skulle få samma sekvens av pseudo-slumpmässiga nummer varje gång applikationen kördes. Fröet är nu baserat på den tid objektet förklaras.
Anmärkningar
Slutligen en anteckning om randomisering. Som nämnts tidigare, när du förklarar en instans av Random
utan några parametrar, kommer konstruktören att använda den aktuella tiden som en del av beräkningen för att skapa det ursprungliga utsädesnumret. Normalt är det OK.
Dock. Om du deklarerar nya instanser på mycket kort tid kan varje gång frönsantalet beräknas vara samma. Tänk på den här koden.
For i As Integer = 1 To 100000
Dim rnd As New Random
x = rnd.Next
Next
Eftersom datorer är mycket snabba i dag kommer det att ta en bråkdel av en sekund att köra och på flera dequentiella iterationer av slingan har systemtiden inte förändrats. Så fröns nummer kommer inte att förändras och slumpmässigt antal kommer att vara densamma. Om du vill generera massor av slumpmässiga nummer, förklara förekomsten av slumpmässigt utanför slingan i detta enkla exempel.
Dim rnd As New Random
For i As Integer = 1 To 100000
x = rnd.Next
Next
Den grundläggande tumregeln är att inte återinitiera slumptalsgenerator under korta tidsperioder.
Förklarar en instans
Dim rng As New Random()
Detta förklarar en instans av Random-klassen som heter rng
. I detta fall används den aktuella tiden vid den punkt där objektet skapas för att beräkna utsäde. Detta är den vanligaste användningen, men har sina egna problem som vi kommer att se senare i kommentarerna
Istället för att låta programmet använda den aktuella tiden som en del av beräkningen för det ursprungliga utsädesnumret, kan du ange det ursprungliga utsädesnumret. Detta kan vara vilken som helst 32-bitars heltal bokstavlig, konstant eller variabel. Se nedan för exempel. Att göra detta innebär att din instans kommer att generera samma sekvens av pseudo-slumpmässiga nummer, vilket kan vara användbart i vissa situationer.
Dim rng As New Random(43352)
eller
Dim rng As New Random(x)
där x
har deklarerats någon annanstans i ditt program som en heltalskonstant eller variabel.
Generera ett slumpmässigt nummer från en instans av slumpmässigt
Följande exempel förklarar en ny instans av slumpmässigt klass och använder sedan metoden. .Next
att generera nästa nummer i sekvensen av pseudo-slumpmässiga nummer.
Dim rnd As New Random
Dim x As Integer
x = rnd.Next
Den sista raden ovan genererar nästa pseudo-slumpmässiga nummer och tilldelar det till x
. Detta nummer kommer att ligga i intervallet 0 - 2147483647. Du kan emellertid också ange antalet intervall som ska genereras som i exemplet nedan.
x = rnd.Next(15, 200)
Observera dock att användningen av dessa parametrar kommer att vara mellan 15 eller högre och 199 eller lägre.
Du kan också generera flytande punktnummer av typen Dubbel med .NextDouble
t.ex.
Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()
Du kan dock inte ange ett intervall för detta. Det kommer alltid att ligga inom intervallet 0,0 till mindre än 1,0.