Kā ģenerēt nejaušus skaitļus programmā C#
Nejaušus skaitļus plaši izmanto digitālajās spēlēs, statistiskajā izlasē, kriptogrāfijā, statistiskās fizikas aprēķinos, skaitliskā analīzē, radiosakariem un kazino spēlēs, piemēram, ruletes ritenī u. c
Mēs varam izmantot Random
klasi, lai ģenerētu nejaušus skaitļus C#.
Kas ir C# Random
klase?
C# Random
šī klase ir pseidogadījuma skaitļu ģenerators, kas ir algoritms, kurš ģenerē skaitļu secību, kas atbilst noteiktām nejaušības statistiskajām prasībām.
Šai klasei ir 5 metodes Next()
, NextInt64()
,NextBytes()
, NextDouble()
un NextSingle()
Atkarībā no skaitļa veida, t. i., int
,long
u. c., mēs varam izmantot attiecīgo metodi.
Izskatīsim piemērus, lai to izprastu sīkāk
Ģenerēt nejaušu veselu skaitli C# valodā
Soļi, kā ģenerēt nejaušu veselu skaitli programmā C#
- Instancējiet nejaušo skaitļu klasi.
- Izmantojiet
Random.Next()
metodi, lai atgrieztu nejaušu veselu skaitli starpInt32.MinValue
unInt32.MaxValue
.
var randomInteger = new Random();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
/* OUTPUT :
2027076668
1095111085
535874255
1973884472
430547700
*/
Ģenerē nejaušu veselu skaitli starp minimālo un maksimālo vērtību
Random.Next()
ir pārslogota metode, kas kā parametrus pieņem minimālo un maksimālo vērtību un ģenerē nejaušu veselu skaitli starp dotajām vērtībām.
Lai ģenerētu nejaušus skaitļus no 100 līdz 1000, izmantojiet turpmāk norādīto kodu
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
*/
Ģenerēt nejaušu garu skaitli(Int64) programmā C#
Lai ģenerētu nejaušu garu skaitli, t. i., Int64
C#, izmantojiet Random.NextInt64()
metodi, kas atgriež nejaušu Int64
skaitli starp Int64.MinValue
un Int64.MaxValue
.
var RandomInt64 = new Random();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
/* OUTPUT :
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/
Ģenerēt nejaušu garu skaitli(Int64) dotajā diapazonā
Līdzīgi kā Random.Next()
, Random.NextInt64()
ir pārslogota metode, kas kā parametrus pieņem diapazonu, t. i., minimālo un maksimālo vērtību, un atgriež nejaušu Int64
skaitli starp tām.
Lai ģenerētu nejaušus skaitļus no 100000 līdz 200000, izmantojiet turpmāk norādīto kodu
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
*/
Ģenerētie nejaušie skaitļi nav pilnīgi nejauši, jo to atlasē tiek izmantots matemātisks algoritms, taču tie ir pietiekami labi lielākajā daļā reālās pasaules gadījumu.
Izvairīšanās no dublēšanās nejaušo skaitļu ģenerēšanas laikā
Ja tiek inicializēta vairāk nekā viena new Random()
klase
Var rasties nejaušo skaitļu dublēšanās. (Daudzpavedienu lietojumprogramma)
var randomOne = new Random();
var randomTwo = new Random(); // Don't do this
Tāpēc labāk ir inicializēt tikai vienu Random()
klases gadījumu un izmantot to visā lietojumprogrammā.
//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);
}
}
Ja vēlaties ģenerēt nejaušo skaitļu sērijas, daudzpavedienu vidē izmantojiet iepriekš minēto metodi.
Izmantojot kriptogrāfisko C# RandomNumberGenerator
Ja vēlaties ģenerēt patiesi unikālus nejaušus skaitļus, varat izmantot RandomNumberGenerator
klasi, kas ir daļa no System.Security.Cryptography
bibliotēkas.
Šī klase ģenerē kriptogrāfiski drošus nejaušus skaitļus un ir piemērota nejaušas paroles izveidei.
var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);
Metodei RandomNumberGenerator
mēs varam nodot arī diapazonu.
var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);
Izmantojot C# RNGCryptoServiceProvider
klasi
Šī klase tagad ir novecojusi, Neizmantojiet šo metodi.
RNGCryptoServiceProvider
implementē kriptogrāfisku nejaušo skaitļu ģeneratoru (RNG), izmantojot kriptogrāfijas pakalpojumu sniedzēja (CSP) nodrošināto implementāciju.
Izmantojiet tālāk sniegto kodu, lai izveidotu nejaušus skaitļus, izmantojot C# RNGCryptoServiceProvider
klasi.
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] randomNumber = new byte[4];//4 for int32
rng.GetBytes(randomNumber);
int value = BitConverter.ToInt32(randomNumber, 0);
}
Kopsavilkums
Šajā pamācībā mēs uzzinājām dažādus veidus, kā ģenerēt nejaušus skaitļus C# ar vienkāršiem piemēriem.