Hoe willekeurige getallen genereren in C#
Willekeurige getallen worden veel gebruikt in digitale spellen, statistische steekproeven, cryptografie, berekeningen in de statistische natuurkunde, numerieke analyse, radiocommunicatie en casinospellen zoals het Roulettewiel enz
We kunnen de klasse Random
gebruiken om willekeurige getallen in C# te genereren.
Wat is de klasse C# Random
?
C# Random
class is een pseudo-willekeurige getallengenerator, een algoritme dat een reeks getallen genereert die voldoen aan bepaalde statistische eisen voor willekeurigheid.
Deze klasse heeft 5 methodes Next()
, NextInt64()
,NextBytes()
, NextDouble()
en NextSingle()
Afhankelijk van het type nummer, int
,long
enz. kunnen we de overeenkomstige methode gebruiken.
Laten we de voorbeelden doornemen om het verder te begrijpen
Willekeurig geheel getal genereren in C#
Stappen om Willekeurig geheel getal in C# te genereren
- Installeer de klasse voor willekeurige getallen.
- Gebruik de methode
Random.Next()
om een willekeurig geheel getal tussenInt32.MinValue
enInt32.MaxValue
te genereren.
var randomInteger = new Random();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
/* OUTPUT :
2027076668
1095111085
535874255
1973884472
430547700
*/
Genereer willekeurig geheel getal tussen minimum en maximum waarden
Random.Next()
heeft een overbelaste methode die minimum- en maximumwaarden als parameters accepteert en een willekeurig geheel getal tussen de opgegeven waarden genereert.
Gebruik de volgende code om willekeurige getallen tussen 100 en 1000 te genereren
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
*/
Willekeurig lang nummer(Int64) genereren in C#
Int64
Om een willekeurig lang getal, Int64
, te genereren in C#, gebruik je de methode Random.NextInt64()
die een willekeurig getal tussen Int64.MinValue
en Int64.MaxValue
teruggeeft.
var RandomInt64 = new Random();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
/* OUTPUT :
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/
Willekeurig lang getal (Int64) in gegeven bereik genereren
Vergelijkbaar met Random.Next()
heeft Random.NextInt64()
een overbelaste methode, die Bereik, d.w.z. minimum en maximum waarden als parameters accepteert en een willekeurig Int64
getal daartussen teruggeeft.
Gebruik de volgende code om willekeurige getallen tussen 100000 en 200000 te genereren
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
*/
De gegenereerde willekeurige getallen zijn niet volledig willekeurig omdat een wiskundig algoritme wordt gebruikt om ze te selecteren, maar ze zijn goed genoeg voor de meeste gevallen in de echte wereld.
Vermijden van duplicaten bij het genereren van willekeurige getallen
Als u meer dan één klasse new Random()
initialiseert
Krijg je misschien dubbele willekeurige getallen. (Multithreaded applicatie)
var randomOne = new Random();
var randomTwo = new Random(); // Don't do this
Het is dus beter om slechts één instantie van de klasse Random()
te initialiseren, en die in de hele toepassing te gebruiken.
//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);
}
}
Als u reeksen willekeurige getallen wilt genereren, gebruik dan de bovenstaande methode in een multithreaded omgeving.
Gebruik van cryptografische C# RandomNumberGenerator
Als u echt unieke willekeurige getallen wilt genereren, kunt u gebruik maken van de klasse RandomNumberGenerator
, die deel uitmaakt van de bibliotheek System.Security.Cryptography
.
Deze klasse genereert een cryptografisch veilig willekeurig getal en is geschikt voor het maken van een willekeurig wachtwoord.
var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);
We kunnen ook een bereik doorgeven aan de methode RandomNumberGenerator
.
var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);
De klasse C# RNGCryptoServiceProvider
gebruiken
Deze klasse is nu verouderd, gebruik deze methode niet.
RNGCryptoServiceProvider
implementeert een cryptografische Random Number Generator (RNG) met behulp van de implementatie van de cryptografische dienstverlener (CSP).
Gebruik de onderstaande code om een willekeurig getal te maken met de klasse C# RNGCryptoServiceProvider
.
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] randomNumber = new byte[4];//4 for int32
rng.GetBytes(randomNumber);
int value = BitConverter.ToInt32(randomNumber, 0);
}
Samenvatting
In deze tutorial hebben we verschillende manieren geleerd om willekeurige getallen te genereren in C# met eenvoudige voorbeelden.