Zoeken…


Invoering

De klasse Random wordt gebruikt om niet-negatieve pseudo-willekeurige gehele getallen te genereren die niet echt willekeurig zijn, maar voor algemene doeleinden dichtbij genoeg zijn.

De sequentie wordt berekend met behulp van in eerste instantie (de Seed) In eerdere versies van NET, dit aantal zaden was hetzelfde elke keer dat een verzoek werd uitgevoerd. Dus wat er zou gebeuren, was dat je dezelfde reeks pseudo-willekeurige getallen zou krijgen elke keer dat de applicatie werd uitgevoerd. Het zaad is nu gebaseerd op de tijd waarop het object is gedeclareerd.

Opmerkingen

Eindelijk een opmerking over randomisatie. Zoals eerder vermeld, wanneer u een instantie van Random zonder parameters declareert, gebruikt de constructor de huidige tijd als onderdeel van de berekening om het eerste seed-nummer te maken. Normaal is dit OK.

Echter. Als u nieuwe instanties in een zeer korte tijd opnieuw declareert, kan elke keer dat het seed-nummer wordt berekend, de tijd hetzelfde zijn. Overweeg deze code.

For i As Integer = 1 To 100000
    Dim rnd As New Random
    x = rnd.Next
Next

Omdat computers tegenwoordig erg snel zijn, duurt het een fractie van een seconde voordat deze code wordt uitgevoerd en bij verschillende foutieve iteraties van de lus, is de systeemtijd niet gewijzigd. Het zaadnummer zal dus niet veranderen en het willekeurige nummer zal hetzelfde zijn. Als u veel willekeurige getallen wilt genereren, declareert u het exemplaar van willekeurig buiten de lus in dit eenvoudige voorbeeld.

Dim rnd As New Random
For i As Integer = 1 To 100000
    x = rnd.Next
Next

De basis vuistregel is niet opnieuw willekeurig nummergenerator gedurende een korte periode van tijd opnieuw te maken.

Een instantie verklaren

Dim rng As New Random()

Dit verklaart een instantie van de klasse Random genaamd rng . In dit geval wordt de huidige tijd op het punt waar het object is gemaakt, gebruikt om het zaad te berekenen. Dit is het meest voorkomende gebruik, maar heeft zijn eigen problemen, zoals we later in de opmerkingen zullen zien

In plaats van het programma de huidige tijd te laten gebruiken als onderdeel van de berekening voor het initiële seed-nummer, kunt u het initiële seed-nummer opgeven. Dit kan elke 32 bit geheel getal letterlijk, constant of variabel zijn. Zie hieronder voor voorbeelden. Dit betekent dat uw exemplaar dezelfde reeks pseudo-willekeurige getallen genereert, wat in bepaalde situaties nuttig kan zijn.

Dim rng As New Random(43352)

of

Dim rng As New Random(x)

waarbij x elders in uw programma is gedeclareerd als een integer-constante of variabele.

Genereer een willekeurig getal uit een instantie van Willekeurig

In het volgende voorbeeld wordt een nieuwe instantie van de klasse Random .Next en wordt vervolgens de methode .Next gebruikt om het volgende getal in de reeks pseudo-willekeurige getallen te genereren.

Dim rnd As New Random
Dim x As Integer
x = rnd.Next

De laatste regel hierboven genereert het volgende pseudo-willekeurige nummer en wijst dit toe aan x . Dit nummer ligt in het bereik van 0 - 2147483647. U kunt echter ook het bereik opgeven dat moet worden gegenereerd, zoals in het onderstaande voorbeeld.

x = rnd.Next(15, 200)

Houd er echter rekening mee dat het gebruik van deze parameters tussen 15 of hoger en 199 of lager zal liggen.

U kunt ook zwevende kommagetallen van het type Double .NextDouble bijvoorbeeld .NextDouble

Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()

U kunt hiervoor echter geen bereik opgeven. Het zal altijd binnen het bereik van 0,0 tot minder dan 1,0 liggen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow