Hogyan generáljunk véletlen számokat C# nyelven
A véletlen számokat széles körben használják a digitális játékokban, a statisztikai mintavételezésben, a kriptográfiában, a statisztikai fizikában, a numerikus elemzésben, a rádiós kommunikációban és a kaszinójátékokban, például a rulettkerékben stb
Véletlenszámok generálására C# nyelven használhatjuk a Random
osztályt.
Mi az a C# Random
osztály?
C# Random
osztály egy pszeudo-véletlenszám-generátor, amely egy olyan algoritmus, amely olyan számsorozatot generál, amely megfelel bizonyos statisztikai követelményeknek a véletlenszerűség tekintetében.
Ennek az osztálynak 5 metódusa van: Next()
, NextInt64()
,NextBytes()
, NextDouble()
és NextSingle()
A szám típusától függően, azaz a int
,long
stb. számok típusától függően használhatjuk a megfelelő módszert.
Nézzük át a példákat a további megértéshez
Véletlen egész szám generálása C# nyelven
Véletlen egész szám generálásának lépései C# nyelven
- Minősítsük a véletlen szám osztályt.
- A
Random.Next()
metódus segítségével aInt32.MinValue
és aInt32.MaxValue
közötti véletlen egész számot adja vissza.
var randomInteger = new Random();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
/* OUTPUT :
2027076668
1095111085
535874255
1973884472
430547700
*/
Véletlen egész szám generálása a minimális és maximális értékek között
Random.Next()
rendelkezik egy túlterhelt metódussal, amely paraméterként elfogadja a minimum és maximum értékeket, és a megadott értékek között egy véletlen egész számot generál.
A 100 és 1000 közötti véletlen számok generálásához használja az alábbi kódot
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
*/
Véletlen hosszú szám(Int64) generálása C# nyelven
A véletlen hosszú szám generálásához, azaz a Int64
C# nyelven, használja a Random.NextInt64()
módszert, amely a Int64.MinValue
és a Int64.MaxValue
közötti véletlenszerű Int64
számot adja vissza.
var RandomInt64 = new Random();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
/* OUTPUT :
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/
Véletlen hosszú szám (Int64) generálása adott tartományban
Hasonlóan a Random.Next()
, a Random.NextInt64()
, rendelkezik egy túlterhelt metódussal, amely elfogadja a Range, azaz a minimális és maximális értékeket paraméterként, amely egy véletlenszerű Int64
számot ad vissza ezek között.
A 100000 és 200000 közötti véletlen számok generálásához használjuk az alábbi kódot
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
*/
A generált véletlen számok nem teljesen véletlenszerűek, mivel egy matematikai algoritmus segítségével választjuk ki őket, de a legtöbb valós esethez elég jók.
Duplikátumok elkerülése a véletlenszámok generálásakor
Ha egynél több new Random()
osztályt inicializálunk
Duplikált véletlenszámokat kaphatsz. (Többszálú alkalmazás)
var randomOne = new Random();
var randomTwo = new Random(); // Don't do this
Ezért jobb, ha csak egy Random()
osztálypéldányt inicializálunk, és azt használjuk az egész alkalmazásban.
//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);
}
}
Ha véletlen számok sorozatát szeretné generálni, többszálas környezetben használja a fenti módszert.
Kriptográfiai C# RandomNumberGenerator
Ha valóban egyedi véletlen számokat akarsz generálni, használhatod a RandomNumberGenerator
osztályt, amely a System.Security.Cryptography
könyvtár része.
Ez az osztály kriptográfiailag biztonságos véletlen számot generál, és alkalmas véletlen jelszó létrehozására.
var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);
A RandomNumberGenerator
metódusnak tartományt is átadhatunk.
var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);
A C# RNGCryptoServiceProvider
osztály használata
Ez az osztály már elavult, ne használd ezt a módszert.
RNGCryptoServiceProvider
kriptográfiai véletlenszám-generátort (RNG) valósít meg a kriptográfiai szolgáltató (CSP) által biztosított implementációval.
Az alábbi kód segítségével hozzon létre véletlen számot a C# RNGCryptoServiceProvider
osztállyal.
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] randomNumber = new byte[4];//4 for int32
rng.GetBytes(randomNumber);
int value = BitConverter.ToInt32(randomNumber, 0);
}
Összefoglaló
Ebben a bemutatóban megtanultuk a véletlen számok generálásának különböző módjait C# nyelven, egyszerű példákon keresztül.