Maison > Article > développement back-end > Générateur de nombres aléatoires en C#
Un générateur de nombres aléatoires est une bibliothèque intégrée en C# qui génère des nombres entiers et des nombres à virgule flottante de manière aléatoire. Chaque fois que la méthode pertinente de la bibliothèque est invoquée, elle renvoie un nombre aléatoire. Une série de nombres aléatoires est un ensemble de nombres qui ne suivent aucun modèle. Le générateur de nombres aléatoires en C# a tendance à générer une telle série chaque fois qu'il est invoqué.
La prochaine question qui vient à l’esprit est la suivante : pourquoi l’appellent-ils classe de générateur de nombres pseudo-aléatoires ? Comprenons cela à travers le comportement humain réel. Lorsqu’on demande à un être humain de sélectionner une couleur au hasard, il choisit une certaine couleur. Disons qu'il a choisi Jaune. Qu’est-ce qui l’a poussé à choisir le jaune ? Cela pourrait être sa couleur préférée ou la couleur de son environnement, ou il pourrait avoir pensé à quelque chose de jaune à ce moment-là. Ce comportement humain qui motive la décision de choisir quelque chose au hasard est appelé la graine dans le monde du hasard. La graine est le déclencheur ou le point de départ du caractère aléatoire.
Maintenant, lorsque la graine est prévisible, les nombres aléatoires deviennent moins aléatoires. On les appelle alors nombres pseudo-aléatoires. Lorsqu'ils sont imprévisibles, ils sont appelés numéros aléatoires sécurisés.
C# Random Class utilise l'horodatage actuel comme graine, ce qui est très prévisible. Et par conséquent, le terme classe génératrice de nombres pseudo-aléatoires.
La classe RNGCryptoServiceProvider de l'espace de noms System.Security.Cryptography est capable de générer des nombres aléatoires sécurisés, ceux qui peuvent être utilisés comme mots de passe.
La première chose pour générer un nombre aléatoire en C# est d'initialiser la classe Random. Cela peut être fait par n'importe lequel des deux constructeurs de la classe :
Voyons un exemple de la façon de générer des entiers aléatoires :
L'exemple ci-dessous génère des nombres Int32 aléatoires.
Code :
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static int GenerateRandomInt(Random rnd) { return rnd.Next(); } }
Sortie :
L'exemple ci-dessous génère des nombres Int32 aléatoires compris entre 0 et 100.
Code :
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static int GenerateRandomInt(Random rnd) { return rnd.Next(100); } }
Sortie :
L'exemple ci-dessous génère des nombres Int32 aléatoires compris entre 50 et 100.
Code :
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static int GenerateRandomInt(Random rnd) { return rnd.Next(50, 100); } }
Sortie :
Voyons un exemple de la façon de générer des nombres aléatoires à virgule flottante :
L'exemple ci-dessous génère des nombres Int32 aléatoires.
Code :
using System; public class Program { public static void Main() { Random rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd)); } public static double GenerateRandomInt(Random rnd) { return rnd.NextDouble(); } }
Sortie :
The most common mistake developers commit while generating random numbers is that for each random number, they create a new object of Random Class. As illustrated in the example below:
Code:
using System; public class Program { public static void Main() { for (int i = 0; i < 10; i++) Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt()); } public static int GenerateRandomInt() { Random rnd = new Random(); //a very common mistake return rnd.Next(); } }
Output:
As explained in the working of Random Class, the numbers generated are based on the seed value and the current state of the machine. Any instance of Random class starts with the seed value, saves the current state and uses it to generate the next random number. In the code above, the mistake was to create a new instance of the Random class in every iteration of the loop. So, before the time in the internal clock changes, the code is fully executed, and each instance of Random class is instantiated with the same seed value. This results in the same set of numbers generated every time.
In this article, we learnt about the random number generator in C# and how it internally works to generate random numbers. We also briefly learnt the concept of pseudo-random and secure-random numbers. This information is sufficient for developers to use the Random class in their applications. Deep dive, if interested to explore more on random numbers for passwords and one-time passwords.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!