Generierung von Zufallszahlen in C#
Zufallszahlen sind weit verbreitet in digitalen Spielen, statistische Stichproben, Kryptographie, Berechnungen in der statistischen Physik, numerische Analyse, Funkkommunikation und Casino-Spiele wie Roulette-Rad usw. verwendet
Wir können die Klasse Random
verwenden, um Zufallszahlen in C# zu generieren.
Was ist die Klasse C# Random
?
C# Random
die Klasse ist ein Pseudo-Zufallszahlengenerator, d. h. ein Algorithmus, der eine Folge von Zahlen erzeugt, die bestimmte statistische Anforderungen an die Zufälligkeit erfüllen.
Diese Klasse hat 5 Methoden Next()
, NextInt64()
,NextBytes()
, NextDouble()
und NextSingle()
Je nach Art der Zahl, d. h. int
,long
usw., können wir die entsprechende Methode verwenden.
Schauen wir uns die Beispiele an, um sie besser zu verstehen
Zufällige Ganzzahl in C# generieren
Schritte zum Erzeugen einer zufälligen Ganzzahl in C#
- Instanziieren Sie die Zufallszahlen-Klasse.
- Verwenden Sie die Methode
Random.Next()
, um eine zufällige ganze Zahl zwischenInt32.MinValue
undInt32.MaxValue
zu erhalten.
var randomInteger = new Random();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
/* OUTPUT :
2027076668
1095111085
535874255
1973884472
430547700
*/
Generieren Sie eine zufällige ganze Zahl zwischen dem minimalen und dem maximalen Wert
Random.Next()
verfügt über eine überladene Methode, die Mindest- und Höchstwerte als Parameter akzeptiert und eine zufällige ganze Zahl zwischen den angegebenen Werten erzeugt.
Um Zufallszahlen zwischen 100 und 1000 zu erzeugen, verwenden Sie den folgenden Code
Console.WriteLine("Five random integers between 100 and 1000");
for (int counter = 0; counter <= 4; counter++)
Console.WriteLine("{0}", randomNumber.Next(100, 1000));
/* OUTPUT:
Five random integers between 100 and 1000
904
853
554
290
614
*/
Generate Random long number(Int64) in C#
Um eine zufällige lange Zahl, d.h. Int64
, in C# zu erzeugen, verwenden Sie die Methode Random.NextInt64()
, die eine zufällige Zahl Int64
zwischen Int64.MinValue
und Int64.MaxValue
zurückgibt.
var RandomInt64 = new Random();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
/* OUTPUT :
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/
Generieren Sie eine zufällige lange Zahl (Int64) in einem bestimmten Bereich
Ähnlich wie Random.Next()
verfügt Random.NextInt64()
über eine überladene Methode, die Range, d.h. Minimal- und Maximalwerte als Parameter akzeptiert und eine zufällige Int64
Zahl zwischen diesen Werten zurückgibt.
Um Zufallszahlen zwischen 100000 und 200000 zu erzeugen, verwenden Sie den folgenden Code
var RandomInt64 = new Random();
Console.WriteLine("Five random integers between 100000 and 200000");
for (int counter = 0; counter <= 4; counter++)
Console.WriteLine("{0}", RandomInt64.NextInt64(100000, 200000));
/* OUTPUT:
Five random long Int64 numbers between 100000 and 200000
144220
194475
185075
159433
136542
*/
Die generierten Zufallszahlen sind nicht völlig zufällig, da ein mathematischer Algorithmus verwendet wird, um sie auszuwählen, aber sie sind gut genug für die meisten Fälle in der realen Welt.
Vermeidung von Duplikaten bei der Generierung von Zufallszahlen
Wenn Sie mehr als eine new Random()
Klasse initialisieren
Sie könnten doppelte Zufallszahlen erhalten. (Multithreading-Anwendung)
var randomOne = new Random();
var randomTwo = new Random(); // Don't do this
Es ist daher besser, nur eine Instanz der Klasse Random()
zu initialisieren und diese in der gesamten Anwendung zu verwenden.
//Function to generate unique random number using `Random()` class
private static readonly Random randomInstance = new Random();
public static int GenerateRandomNumber(int min, int max)
{
lock(randomInstance) // synchronize
{
return randomInstance.Next(min, max);
}
}
Wenn Sie in einer Multithreading-Umgebung eine Reihe von Zufallszahlen erzeugen möchten, verwenden Sie die obige Methode.
Verwendung kryptographischer C# RandomNumberGenerator
Wenn Sie wirklich eindeutige Zufallszahlen erzeugen wollen, können Sie die Klasse RandomNumberGenerator
verwenden, die Teil der Bibliothek System.Security.Cryptography
ist.
Diese Klasse generiert eine kryptografisch sichere Zufallszahl und eignet sich für die Erstellung eines Zufallspassworts.
var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);
Wir können auch einen Bereich an die Methode RandomNumberGenerator
übergeben.
var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);
Verwendung der Klasse C# RNGCryptoServiceProvider
Diese Klasse ist jetzt veraltet, verwenden Sie diese Methode nicht.
RNGCryptoServiceProvider
implementiert einen kryptografischen Zufallszahlengenerator (RNG) unter Verwendung der vom Kryptodienstanbieter (CSP) bereitgestellten Implementierung.
Verwenden Sie den folgenden Code, um eine Zufallszahl mit der Klasse C# RNGCryptoServiceProvider
zu erstellen.
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] randomNumber = new byte[4];//4 for int32
rng.GetBytes(randomNumber);
int value = BitConverter.ToInt32(randomNumber, 0);
}
Zusammenfassung
In diesem Tutorial haben wir anhand einfacher Beispiele gelernt, wie man in C# Zufallszahlen erzeugt.