Visual Basic .NET Language
Zufällig
Suche…
Einführung
Die Random-Klasse wird verwendet, um nicht negative pseudozufällige Ganzzahlen zu generieren, die nicht wirklich zufällig sind, aber für allgemeine Zwecke nahe genug liegen.
Die Sequenz wird anhand einer Anfangsnummer (" Seed" ) berechnet. In früheren Versionen von .net war diese Startnummer bei jeder Ausführung der Anwendung gleich. Es würde also passieren, dass Sie bei jeder Ausführung der Anwendung dieselbe Folge von Pseudo-Zufallszahlen erhalten würden. Nun basiert der Startwert auf der Zeit, zu der das Objekt deklariert ist.
Bemerkungen
Zum Schluss noch ein Hinweis zur Randomisierung. Wenn Sie, wie bereits erwähnt, eine Instanz von Random
ohne Parameter deklarieren, verwendet der Konstruktor die aktuelle Uhrzeit als Teil der Berechnung, um die ursprüngliche Startnummer zu erstellen. Normalerweise ist das OK.
Jedoch. Wenn Sie innerhalb kürzester Zeit neue Instanzen erneut deklarieren, könnte die Zeit bei jeder Berechnung der Startnummer gleich sein. Betrachten Sie diesen Code.
For i As Integer = 1 To 100000
Dim rnd As New Random
x = rnd.Next
Next
Da Computer heutzutage sehr schnell sind, dauert die Ausführung dieses Codes nur einen Bruchteil einer Sekunde, und bei mehreren dequentiellen Iterationen der Schleife hat sich die Systemzeit nicht geändert. Die Startnummer ändert sich also nicht und die Zufallszahl ist gleich. Wenn Sie viele Zufallszahlen generieren möchten, deklarieren Sie in diesem einfachen Beispiel die Instanz des Zufalls außerhalb der Schleife.
Dim rnd As New Random
For i As Integer = 1 To 100000
x = rnd.Next
Next
Als Faustregel gilt, dass der Zufallszahlengenerator nicht über kurze Zeiträume erneut instanziiert wird.
Instanz deklarieren
Dim rng As New Random()
Dies deklariert eine Instanz der Random-Klasse namens rng
. In diesem Fall wird die aktuelle Zeit an dem Punkt, an dem das Objekt erstellt wird, zur Berechnung des Saatguts verwendet. Dies ist die häufigste Verwendung, hat jedoch ihre eigenen Probleme, wie wir später in den Ausführungen sehen werden
Anstatt zuzulassen, dass das Programm die aktuelle Zeit als Teil der Berechnung für die erste Startnummer verwendet, können Sie die ursprüngliche Startnummer angeben. Dies kann ein beliebiges 32-Bit-Integer-Literal, eine Konstante oder eine Variable sein. Beispiele finden Sie unten. Dies bedeutet, dass Ihre Instanz dieselbe Folge von Pseudozufallszahlen generiert, was in bestimmten Situationen hilfreich sein kann.
Dim rng As New Random(43352)
oder
Dim rng As New Random(x)
Dabei wurde x
anderer Stelle in Ihrem Programm als Integer-Konstante oder -Variable deklariert.
Generieren Sie eine Zufallszahl aus einer Zufallsinstanz
Das folgende Beispiel deklariert eine neue Instanz der Random-Klasse und verwendet dann die Methode .Next
, um die nächste Zahl in der Folge von Pseudozufallszahlen zu generieren.
Dim rnd As New Random
Dim x As Integer
x = rnd.Next
In der letzten Zeile wird die nächste Pseudozufallszahl generiert und x
zugewiesen. Diese Nummer liegt im Bereich von 0 - 2147483647. Sie können jedoch auch den zu generierenden Nummernbereich angeben, wie im folgenden Beispiel gezeigt.
x = rnd.Next(15, 200)
Beachten Sie jedoch, dass bei Verwendung dieser Parameter der Nummernbereich zwischen 15 oder mehr und 199 oder darunter liegt.
Sie können auch Fließkommazahlen vom Typ Double erzeugen, indem .NextDouble
zB .NextDouble
Dim rnd As New Random
Dim y As Double
y = rnd.NextDouble()
Sie können jedoch keinen Bereich dafür angeben. Sie liegt immer im Bereich von 0,0 bis weniger als 1,0.