Zufällige Klasse (Java.util)
Der in der zufälligen Klasse implementierte zufällige Algorithmus ist Pseudo-Random, dh zufällig mit Regeln. Bei der Randomisierung wird die Anzahl der Herkunft des Zufallsalgorithmus als Samen bezeichnet, was eine bestimmte Transformation basierend auf den Samen durchführt, wodurch die erforderlichen Zufallszahlen erzeugt werden.
Zufällige Objekte mit der gleichen Anzahl von Samen, die zufälligen Zahlen, die nach der gleichen Häufigkeit generiert werden, sind genau gleich. Mit anderen Worten, für zwei zufällige Objekte mit derselben Samenzahl sind die zum ersten Mal generierten Zufallszahlen genau gleich und die zum zweiten Mal generierten Zufallszahlen sind genau gleich. Dies erfordert besondere Aufmerksamkeit, wenn mehrere Zufallszahlen generiert werden.
Das Folgende beschreibt die Verwendung der zufälligen Klasse sowie die Erzeugung eines zufälligen Arrays bestimmter Intervalle und der im Implementierungsprogramm erforderlichen Chancen.
1. Erzeugung zufälliger Objekte
Die zufällige Klasse enthält zwei Konstruktoren, die nachfolgend nach unten eingeführt werden:
A. public random ()
Diese Konstruktionsmethode verwendet eine Zahl, die sich auf die relative Zeit bezieht, die der aktuellen Systemzeit als Samennummer entspricht, und dann diese Samenzahl, um das zufällige Objekt zu konstruieren.
B. Öffentliche zufällige (lange Saatgut)
Dieser Konstruktor kann durch Formulierung einer Samenzahl erzeugt werden.
Beispielcode:
Die Codekopie lautet wie folgt:
Random r = neu random ();
Zufälliger r1 = neu zufällig (10);
Wieder: Die Anzahl der Samen ist nur die Ursprungsnummer des zufälligen Algorithmus und hat nichts mit dem Intervall der generierten Zufallszahlen zu tun.
2. Gemeinsame Methoden in der zufälligen Klasse
Die Methoden in der zufälligen Klasse sind relativ einfach und die Funktionen jeder Methode sind ebenfalls leicht zu verstehen. Es ist zu beachten, dass die von jeder Methode in der Zufallsklasse erzeugten Zufallszahlen einheitlich verteilt sind, was bedeutet, dass die Wahrscheinlichkeit der numerischen Erzeugung innerhalb des Intervalls gleich ist. Hier ist eine grundlegende Einführung in diese Methoden:
A. öffentlicher Booleschen Nextboolean ()
Die Funktion dieser Methode besteht darin, einen zufälligen booleschen Wert zu erzeugen, und die Wahrscheinlichkeit, echte und falsche Werte zu erzeugen, ist gleich, dh beides beträgt 50%.
B. öffentliches Doppel -Next -DoUble ()
Der Zweck dieser Methode ist es, einen zufälligen Doppelwert mit dem Wert zwischen [0, 1.0) zu generieren.
C, public int NextInt ()
Der Zweck dieser Methode ist es, einen zufälligen Int -Wert zu erzeugen, der zwischen -231 und 231-1 liegt.
Wenn Sie einen int -Wert für ein bestimmtes Intervall generieren müssen, müssen Sie eine bestimmte mathematische Transformation durchführen. Weitere Informationen finden Sie im folgenden Verwendungsbeispiel.
d, öffentlich int Nextint (int n)
Die Funktion dieser Methode besteht darin, einen zufälligen Int -Wert zu erzeugen, der sich innerhalb des Intervalls von [0, n) befindet, dh einen zufälligen Int -Wert zwischen 0 und n, der 0, aber nicht n enthält.
Wenn Sie einen int -Wert für ein bestimmtes Intervall generieren möchten, müssen Sie auch eine bestimmte mathematische Transformation durchführen. Weitere Informationen finden Sie im folgenden Verwendungsbeispiel.
E, öffentliche Leere Setseed (langer Samen)
Der Zweck dieser Methode besteht darin, die Anzahl der Samen im zufälligen Objekt zurückzusetzen. Nach dem Einstellen der Anzahl der Samen entspricht das zufällige Objekt dem mit dem neuen Schlüsselwort erstellten zufälligen Objekt.
3. Beispiel für zufällige Klasse -Nutzungsbeispiele
Unter Verwendung der zufälligen Klasse soll im Allgemeinen Zufallszahlen für ein bestimmtes Intervall generiert werden. Im Folgenden werden zufällige Zahlen für ein entsprechendes Intervall nacheinander generiert. Die folgenden Codes, die zufällige Zahlen generieren, werden unter Verwendung des folgenden zufälligen Objekts R generiert:
Random r = neu random ();
A. Generieren Sie Dezimalstellen des Intervalls [0, 1.0)
Die Codekopie lautet wie folgt:
double d1 = R.NextDouble ();
Es wird direkt unter Verwendung der NextDouble -Methode erhalten.
B. Generieren Sie Dezimalstellen des Intervalls [0,5,0)
Die Codekopie lautet wie folgt:
Double D2 = R.NextDouble () * 5;
Da das von der NextDouble -Methode erzeugte Zahlenintervall [0, 1.0) ist, ist das Erweitern des Intervalls um das 5 -fache das erforderliche Intervall.
Um eine zufällige Dezimalzahl im Intervall zu erzeugen [0, d) und D ist eine positive Dezimalzahl, müssen Sie nur den Rückgabewert der NextDouble -Methode mit d multiplizieren.
C. Generieren Sie Dezimalstellen im Intervall [1,2,5)
Die Codekopie lautet wie folgt:
Double D3 = R.NextDouble () * 1,5 + 1;
Um eine zufällige Dezimalzahl des Intervalls zu erzeugen [1, 2.5), müssen Sie zuerst eine zufällige Anzahl des Intervalls [0, 1,5) generieren und dann dem generierten Zufallszahlenintervall 1 hinzufügen.
Um eine zufällige Zahl im Bereich des Dezimalintervalls [D1, D2) zu erzeugen, der nicht von 0 beginnt (wobei D1 nicht gleich 0 ist), müssen Sie erst zuerst eine Zufallszahl im Intervall [0, D2-D1) generieren und dann das generierte Zufallszahlenintervall zu D1 hinzufügen.
D. Jede ganze Zahl erzeugen
Die Codekopie lautet wie folgt:
int n1 = r.Nextint ();
Verwenden Sie einfach die nächste Methode direkt.
e. Erzeugen Sie Ganzzahlen im Intervall [0,10)
Die Codekopie lautet wie folgt:
int n2 = R.Nextint (10);
n2 = math.abs (R.Nextint () % 10);
Die obigen zwei Codezeilen können Ganzzahlen im Intervall [0,10) generieren.
Die erste Implementierung wird direkt mit der NextInt (int n) -Methode in der Zufallsklasse implementiert.
In der zweiten Implementierung wird die erste Methode von NextInt () zur Generierung einer willkürlichen INT -Nummer generiert. Das durch die Zahl der Zahlensumme von 10 erzeugte Intervall beträgt (-10,10) und ermittelt dann den Absolutwert des Intervalls, und das erhaltene Intervall beträgt [0,10).
In ähnlicher Weise können Sie den folgenden Code verwenden, um zufällige Ganzzahlen in jedem Intervall zu generieren [0, n):
Die Codekopie lautet wie folgt:
int n2 = R.Nextint (n);
n2 = math.abs (r.Nextint () % n);
F. Erzeugen Sie Ganzzahlen im Intervall [0,10]
Die Codekopie lautet wie folgt:
int n3 = R.Nextint (11);
n3 = math.abs (R.Nextint () % 11);
Im Vergleich zum Ganzzahlintervall sind das Intervall [0,10] und das [0,11) Intervall gleichwertig, sodass eine Ganzzahl des [0,11) -Intervalls erzeugt wird.
G. Erzeugen Sie Ganzzahlen im Intervall [-3,15)
Die Codekopie lautet wie folgt:
int n4 = R.Nextint (18) - 3;
N4 = Math.abs (R.Nextint () % 18) - 3;
Um zufällige ganze Zahlen zu generieren, die nicht von 0 beginnen, können Sie sich auf die obige Beschreibung des Implementierungsprinzips des Dezimalintervalls beziehen, das nicht von 0 beginnt.
H, Chance zu erreichen
Das Implementieren der Programmlogik gemäß einer bestimmten Chance ist auch ein Problem, das durch zufällige Verarbeitung gelöst werden kann. Hier ist ein einfaches Beispiel, um zu demonstrieren, wie die Zufallslogik mit zufälligen Zahlen implementiert wird.
In der vorherigen Methode Einführung sind die in der nächsten Methode (int n) erzeugten Zahlen einheitlich, dh die Erzeugung der Erzeugung jeder Zahl innerhalb des Intervalls sind gleich. Wenn dann eine zufällige Ganzzahl im Intervall [0,100) erzeugt wird, sollten die Chancen jeder generierten Zahl gleich sein, und da es 100 Ganzzahlen im Intervall haben, betragen die Chancen jeder Zahl 1%. Nach dieser Theorie kann das Wahrscheinlichkeitsproblem im Programm realisiert werden.
Beispiel: Erzeugen Sie zufällig eine Ganzzahl, die 1 mit einer Chance von 55%, 2 mit 40% -Chance und 3 mit 5% Chance erzeugt. Der implementierte Code lautet wie folgt:
Die Codekopie lautet wie folgt:
int n5 = R.Nextint (100);
int m; // Ergebnisnummer
if (n5 <55) {// das Intervall von 55 Zahlen, 55% Chance
M = 1;
} else if (n5 <95) {// [55,95), Intervall von 40 Zahlen, 40% Chance
M = 2;
}anders{
M = 3;
}
Da die Wahrscheinlichkeit jeder Zahl 1%beträgt, beträgt die Wahrscheinlichkeit eines 55 -stelligen Intervalls 55%. Um den Code zu schreiben, werden hier alle Ganzzahlen im [0,55) Intervall verwendet, und das nachfolgende Prinzip ist gleich.
Natürlich kann der Code hier vereinfacht werden, da die Gewinnchancen Multiplikatoren von 5%beträgt. Daher kontrollieren Sie einfach die Chancen auf der Grundlage von 5%. Das Folgende ist die vereinfachte Code -Implementierung:
Die Codekopie lautet wie folgt:
int n6 = R.Nextint (20);
int M1;
if (n6 <11) {
M1 = 1;
} else if (n6 <19) {
M1 = 2;
}anders{
M1 = 3;
}
Im Rahmen des Programms kann die Wahrscheinlichkeitslogik gemäß den oben genannten Anweisungen implementiert werden.
4. Andere Probleme
A. Das Problem des zufälligen Objekts mit derselben Samenzahl
Wie bereits erwähnt, haben zufällige Objekte mit der gleichen Anzahl von Samen die gleichen Zufallszahlen, die nach der gleichen Häufigkeit generiert werden. Das Folgende ist der Testcode:
Die Codekopie lautet wie folgt:
Zufälliger r1 = neu zufällig (10);
Zufälliger r2 = neu zufällig (10);
für (int i = 0; i <2; i ++) {
System.out.println (r1.nextint ());
System.out.println (r2.Nextint ());
}
In diesem Code beträgt die Anzahl der von Objekten R1 und R2 verwendeten Samen 10, sodass die nach derselben Häufigkeit generierten Zufallszahlen genau gleich sind.
Wenn Sie die Situation vermeiden möchten, in der zufällige Zahlen gleich sind, müssen Sie feststellen, dass Sie, egal wie viele zufällige Zahlen Sie im Projekt generieren müssen, nur ein zufälliges Objekt verwenden können.
B. Über die zufällige Methode in der Mathematikklasse
Tatsächlich gibt es auch eine zufällige Methode in der Mathematikklasse. Die Aufgabe dieser zufälligen Methode besteht darin, eine zufällige Dezimalzahl des Intervalls zu generieren [0, 1.0).
Durch das Lesen des Quellcodes der Mathematikklasse können wir feststellen, dass die zufällige Methode in der Mathematikklasse implementiert wird, indem die NextDouble -Methode in der zufälligen Klasse direkt aufgerufen wird.
Es ist nur so, dass die zufällige Methode als relativ einfach bezeichnet wird, so dass viele Programmierer es gewohnt sind, die zufällige Methode der Mathematikklasse zu verwenden, um zufällige Zahlen zu generieren.