Recherche…


Syntaxe

  • Au hasard()

  • Aléatoire (en graine)

  • int Next ()

  • int Next (int maxValue)

  • int Next (int minValue, int maxValue)

Paramètres

Paramètres Détails
La graine Une valeur pour générer des nombres aléatoires. Si elle n'est pas définie, la valeur par défaut est déterminée par l'heure système actuelle.
minValue Les nombres générés ne seront pas inférieurs à cette valeur. S'il n'est pas défini, la valeur par défaut est 0.
Valeur max Les nombres générés seront plus petits que cette valeur. S'il n'est pas défini, la valeur par défaut est Int32.MaxValue .
valeur de retour Renvoie un nombre avec une valeur aléatoire.

Remarques

La graine aléatoire générée par le système n'est pas la même dans chaque cycle.

Les graines produites dans le même temps peuvent être les mêmes.

Générer un int aléatoire

Cet exemple génère des valeurs aléatoires comprises entre 0 et 2147483647.

Random rnd = new Random();
int randomNumber = rnd.Next();

Générer un double aléatoire

Générer un nombre aléatoire entre 0 et 1.0. (n'incluant pas 1.0)

Random rnd = new Random();
var randomDouble = rnd.NextDouble();

Générer un int aléatoire dans une plage donnée

Générer un nombre aléatoire entre minValue et maxValue - 1 .

Random rnd = new Random();
var randomBetween10And20 = rnd.Next(10, 20);

Générer la même séquence de nombres aléatoires encore et encore

Lors de la création d'instances Random avec la même graine, les mêmes numéros seront générés.

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();
}

Sortie:

Random instance 0
726643700 610783965 564707973 1342984399 995276750
Random instance 1
726643700 610783965 564707973 1342984399 995276750

Créer plusieurs classes aléatoires avec différentes graines simultanément

Deux classes aléatoires créées en même temps auront la même valeur de départ.

En utilisant System.Guid.NewGuid().GetHashCode() peut obtenir une graine différente même dans le même temps.

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());

Une autre façon d'obtenir différentes valeurs consiste à utiliser une autre instance Random pour récupérer les valeurs de départ.

Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());

Cela permet également de contrôler le résultat de toutes les instances Random en définissant uniquement la valeur de départ pour les rndSeeds . Toutes les autres instances seront dérivées de manière déterministe de cette valeur de graine unique.

Générer un caractère aléatoire

Générer une lettre aléatoire entre a et z en utilisant la Next() surcharge pour une plage de nombres, puis la conversion résultant int à un char

Random rnd = new Random();
char randomChar = (char)rnd.Next('a','z'); 
//'a' and 'z' are interpreted as ints for parameters for Next()

Générer un nombre qui est un pourcentage d'une valeur maximale

Un besoin commun pour les nombres aléatoires de générer un nombre qui est X% d'une valeur maximale. Cela peut être fait en traitant le résultat de NextDouble() en pourcentage:

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.


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow