Was ist Zufallszahlengenerator in C #?
Ein Zufallszahlengenerator ist eine in C # integrierte Bibliothek, die Ganzzahlen und Gleitkommazahlen zufällig generiert. Jedes Mal, wenn die relevante Methode der Bibliothek aufgerufen wird, wird eine Zufallszahl zurückgegeben. Eine Reihe von Zufallszahlen ist eine Reihe von Zahlen, die keinem Muster folgen. Der Zufallszahlengenerator in C # neigt dazu, bei jedem Aufruf eine solche Reihe zu erzeugen.
Zufällige Klasse in C #
- Wie generiert C # eine Reihe von Zufallszahlen? Die Antwort liegt in der Zufallsklasse des C # -Namensraums.
- Die Zufallsklasse ist eine Pseudozufallszahlengeneratorklasse. Dies bedeutet, dass diese Klasse die Aufgabe hat, eine Reihe von Zahlen zu generieren, die keinem Muster folgen. Aber ist eine Maschine wirklich in der Lage, Zufallszahlen zu generieren? Wie würde die Maschine wissen, welche Nummer als nächstes generiert werden soll? Schließlich ist die Maschine so ausgelegt, dass sie Anweisungen befolgt und Algorithmen ausführt.
- Nein, die Maschine kann keine Zufallszahlen erzeugen. Es gibt einen definierten mathematischen Algorithmus, der auf der aktuellen Uhr und dem aktuellen Status der Maschine basiert und sie dazu anleitet, Zahlen aus einem Satz auszuwählen. Alle Nummern im Set haben die gleiche Wahrscheinlichkeit, dass sie abgeholt werden. Sie sind also nicht vollkommen zufällig. Sie folgen einem Muster. Es ist nur so, dass das Muster ausreichend zufällig ist, um die praktischen menschlichen Anforderungen zu erfüllen.
Pseudo und sicher
Die nächste Frage, die sich stellt, ist, warum sie es Pseudozufallszahlengeneratorklasse nennen. Lassen Sie uns dies durch reales menschliches Verhalten verstehen. Wenn ein Mensch aufgefordert wird, eine zufällige Farbe auszuwählen, nimmt er eine bestimmte Farbe auf. Nehmen wir an, er hat Gelb gewählt. Was veranlasste ihn, gelb zu pflücken? Es könnte seine Lieblingsfarbe oder die Farbe seiner Umgebung sein, oder er hätte zu der Zeit an etwas Gelbes denken können. Dieses menschliche Verhalten, das die Entscheidung, etwas zufällig auszuwählen, antreibt, wird der Same in der Welt der Zufälligkeit genannt. Der Keim ist der Auslöser oder der Anfangspunkt der Zufälligkeit.
Wenn der Startwert vorhersehbar ist, werden die Zufallszahlen weniger zufällig. Sie werden dann Pseudozufallszahlen genannt. Wenn sie nicht vorhersehbar sind, werden sie sichere Zufallszahlen genannt.
C # Random Class verwendet den aktuellen Zeitstempel als Startwert, was sehr gut vorhersehbar ist. Und daher der Begriff Pseudozufallszahlengenerator-Klasse.
RNGCryptoServiceProvider-Klasse
Die RNGCryptoServiceProvider-Klasse aus dem System.Security.Cryptography-Namespace kann sichere Zufallszahlen generieren, die als Kennwörter verwendet werden können.
Zufallszahlengeneratorfunktionen in C #
Die erste Sache, um eine Zufallszahl in C # zu erzeugen, ist die Initialisierung der Zufallsklasse. Dies kann von jedem der beiden Konstruktoren der Klasse durchgeführt werden:
- Random (): Initialisiert ein Objekt der Random-Klasse mit einem zeitbasierten Startwert. Der Startwert ist der aktuelle Zeitstempel der Maschine. In späteren Versionen wurde dies jedoch auf GUID-Basis geändert.
- Random (Int32): Initialisiert ein Objekt der Random-Klasse mit dem angegebenen Startwert. Um die nächste Zufallszahl aus der Reihe zu erhalten, rufen wir die Next () - Methode der Random-Klasse auf.
- Next (): Gibt eine nicht negative Pseudozufalls-Int32-Ganzzahl zurück.
- Next (Int32): Gibt eine nicht negative pseudozufällige Int32-Ganzzahl zurück, die kleiner als die angegebene Ganzzahl ist.
- Next (Int32, Int32): Gibt eine nicht negative pseudozufällige Int32-Ganzzahl innerhalb des angegebenen Bereichs zurück.
Zufallszahlengenerator-Ganzzahlen in C #
Lassen Sie uns ein Beispiel sehen, wie zufällige Ganzzahlen erzeugt werden:
Beispiel 1
Das folgende Beispiel generiert zufällige Int32-Zahlen.
Code:
using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next();
)
)
Ausgabe:
Beispiel # 2
Das folgende Beispiel generiert zufällige Int32-Zahlen im Bereich von 0 bis 100.
Code:
using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(100);
)
)
Ausgabe:
Beispiel # 3
Das folgende Beispiel generiert zufällige Int32-Zahlen im Bereich von 50 bis 100.
Code:
using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(50, 100);
)
)
Ausgabe:
Gleitkommazahlen generieren
Lassen Sie uns ein Beispiel sehen, wie zufällige Gleitkommazahlen erzeugt werden:
Beispiel 1
Das folgende Beispiel generiert zufällige Int32-Zahlen.
Code:
using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static double GenerateRandomInt(Random rnd)
(
return rnd.NextDouble();
)
)
Ausgabe:
Ein sehr häufiger Fehler
Der häufigste Fehler, den Entwickler beim Generieren von Zufallszahlen begehen, besteht darin, dass sie für jede Zufallszahl ein neues Objekt der Zufallsklasse erstellen. Wie im folgenden Beispiel dargestellt:
Beispiel 1
Code:
using System;
public class Program
(
public static void Main()
(
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt());
)
public static int GenerateRandomInt()
(
Random rnd = new Random(); //a very common mistake
return rnd.Next();
)
)
Ausgabe:
Wie viele Zufallszahlen sind gleich und warum ist das passiert?
Wie in der Arbeitsweise von Random Class erläutert, basieren die generierten Zahlen auf dem Startwert und dem aktuellen Status der Maschine. Jede Instanz der Zufallsklasse beginnt mit dem Startwert, speichert den aktuellen Status und generiert daraus die nächste Zufallszahl. Im obigen Code bestand der Fehler darin, in jeder Iteration der Schleife eine neue Instanz der Random-Klasse zu erstellen. Bevor sich die Zeit in der internen Uhr ändert, wird der Code vollständig ausgeführt und jede Instanz der Zufallsklasse wird mit demselben Startwert instanziiert. Dies führt dazu, dass jedes Mal die gleichen Zahlen generiert werden.
Fazit - Zufallszahlengenerator in C #
In diesem Artikel haben wir Informationen zum Zufallszahlengenerator in C # und zur internen Generierung von Zufallszahlen erhalten. Wir haben auch kurz das Konzept von Pseudozufalls- und sicheren Zufallszahlen kennengelernt. Diese Informationen reichen aus, damit Entwickler die Random-Klasse in ihren Anwendungen verwenden können. Deep Dive, wenn Sie mehr über Zufallszahlen für Passwörter und Einmalpasswörter erfahren möchten.
Empfohlene Artikel
Dies ist eine Anleitung zum Zufallszahlengenerator in C #. Hier diskutieren wir, wie der Zufallszahlengenerator funktioniert, das Konzept von Pseudozufalls- und sicheren Zufallszahlen und die Verwendung von Zufallszahlen. Sie können auch unsere anderen verwandten Artikel durchgehen, um mehr zu erfahren -
- Mathematische Funktionen in C #
- Destruktor in C #
- Reverse Number in Python
- Variablen in C #
- Variablen in JavaScript
- Zufallszahlengenerator in Matlab
- Tableau-Versionen
- Zufallszahlengenerator in JavaScript
- Zufallszahlengenerator in PHP