C# Language
Willekeurige getallen genereren in C #
Zoeken…
Syntaxis
Willekeurig()
Willekeurig (in zaad)
int Volgende ()
int Next (int maxValue)
int Next (int minValue, int maxValue)
parameters
parameters | Details |
---|---|
Zaad | Een waarde voor het genereren van willekeurige getallen. Indien niet ingesteld, wordt de standaardwaarde bepaald door de huidige systeemtijd. |
MINVALUE | Gegenereerde getallen zullen niet kleiner zijn dan deze waarde. Als deze niet is ingesteld, is de standaardwaarde 0. |
maximum waarde | Gegenereerde getallen zullen kleiner zijn dan deze waarde. Als deze niet is ingesteld, is de standaardwaarde Int32.MaxValue . |
winstwaarde | Retourneert een getal met willekeurige waarde. |
Opmerkingen
De willekeurige seed die door het systeem wordt gegenereerd, is niet bij elke andere run hetzelfde.
Zaden die tegelijkertijd worden gegenereerd, kunnen hetzelfde zijn.
Genereer een willekeurige int
Dit voorbeeld genereert willekeurige waarden tussen 0 en 2147483647.
Random rnd = new Random();
int randomNumber = rnd.Next();
Genereer een Random double
Genereer een willekeurig getal tussen 0 en 1.0. (exclusief 1.0)
Random rnd = new Random();
var randomDouble = rnd.NextDouble();
Genereer een willekeurige int in een bepaald bereik
Genereer een willekeurig getal tussen minValue
en maxValue - 1
.
Random rnd = new Random();
var randomBetween10And20 = rnd.Next(10, 20);
Telkens opnieuw dezelfde reeks willekeurige getallen genereren
Wanneer u Random
instanties met hetzelfde seed maakt, worden dezelfde nummers gegenereerd.
int seed = 5;
for (int i = 0; i < 2; i++)
{
Console.WriteLine("Random instance " + i);
Random rnd = new Random(seed);
for (int j = 0; j < 5; j++)
{
Console.Write(rnd.Next());
Console.Write(" ");
}
Console.WriteLine();
}
Output:
Random instance 0
726643700 610783965 564707973 1342984399 995276750
Random instance 1
726643700 610783965 564707973 1342984399 995276750
Maak meerdere willekeurige klassen tegelijk met verschillende zaden
Twee willekeurige klassen die tegelijkertijd worden gemaakt, hebben dezelfde seed-waarde.
System.Guid.NewGuid().GetHashCode()
kan zelfs in dezelfde tijd een andere seed krijgen.
Random rnd1 = new Random();
Random rnd2 = new Random();
Console.WriteLine("First 5 random number in rnd1");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd2.Next());
rnd1 = new Random(Guid.NewGuid().GetHashCode());
rnd2 = new Random(Guid.NewGuid().GetHashCode());
Console.WriteLine("First 5 random number in rnd1 using Guid");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2 using Guid");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd2.Next());
Een andere manier om verschillende zaden te bereiken, is door een andere instantie Random
te gebruiken om de zaadwaarden op te halen.
Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());
Dit maakt het ook mogelijk om het resultaat van alle Random
instanties te beheren door alleen de seed-waarde voor de rndSeeds
. Alle andere instanties zullen deterministisch worden afgeleid van die enkele seed-waarde.
Genereer een willekeurig karakter
Genereer een willekeurige letter tussen a
en z
door de overbelasting Next()
voor een gegeven bereik van getallen en converteer vervolgens de resulterende int
naar een char
Random rnd = new Random();
char randomChar = (char)rnd.Next('a','z');
//'a' and 'z' are interpreted as ints for parameters for Next()
Genereer een getal dat een percentage is van een maximale waarde
Een veel voorkomende behoefte aan willekeurige getallen om een getal te genereren dat X%
van een maximale waarde is. dit kan worden gedaan door het resultaat van NextDouble()
als een percentage te behandelen:
var rnd = new Random();
var maxValue = 5000;
var percentage = rnd.NextDouble();
var result = maxValue * percentage;
//suppose NextDouble() returns .65, result will hold 65% of 5000: 3250.