web-dev-qa-db-fra.com

Comment fonctionne le générateur de nombres aléatoires de C #?

Je me demandais simplement comment fonctionne le générateur de nombres aléatoires en C #. J'étais aussi curieux de savoir comment créer un programme qui génère des nombres aléatoires ENTIERS de 1-100.

30
Seth Taddiken

Je me demandais simplement comment fonctionne le générateur de nombres aléatoires en C #.

C'est spécifique à l'implémentation, mais le l'entrée wikipedia pour les générateurs de nombres pseudo-aléatoires devrait vous donner quelques idées.

J'étais aussi curieux de savoir comment je pourrais créer un programme qui génère des nombres aléatoires PLEINS EN ENTIER de 1-100.

Vous pouvez utiliser Random.Next(int, int) :

Random rng = new Random();
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(rng.Next(1, 101));
}

Notez que la limite supérieure est exclusive - c'est pourquoi j'ai utilisé 101 ici.

Vous devez également être conscient de certains "pièges" associés à Random - en particulier, vous devriez ne pas créer une nouvelle instance tous les temps que vous voulez générer un nombre aléatoire, sinon si vous générez beaucoup de nombres aléatoires en peu de temps, vous verrez beaucoup de répétitions. Voir mon article sur ce sujet pour plus de détails.

22
Jon Skeet

Vous pouvez utiliser Random.Next(int maxValue) :

Return : nombre entier signé de 32 bits supérieur ou égal à zéro et inférieur à maxValue; c'est-à-dire que la plage des valeurs de retour inclut généralement zéro mais pas maxValue. Cependant, si maxValue est égal à zéro, maxValue est renvoyé.

var r = new Random();
// print random integer >= 0 and  < 100
Console.WriteLine(r.Next(100));

Dans ce cas cependant, vous pouvez utiliser Random.Next(int minValue, int maxValue) , comme ceci:

// print random integer >= 1 and < 101
Console.WriteLine(r.Next(1, 101);)
// or perhaps (if you have this specific case)
Console.WriteLine(r.Next(100) + 1);
32
Zbigniew

Je cherche RNG sur Internet depuis un moment. Tout ce que j'ai vu était TROP complexe ou n'était tout simplement pas ce que je cherchais. Après avoir lu quelques articles, j'ai pu créer ce code simple.

{
  Random rnd = new Random(DateTime.Now.Millisecond);
  int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 };
  textBox1.Text = Convert.ToString(b[rnd.Next(10)])
}

Explication simple,

  1. créer un tableau entier à 1 dimension.
  2. compléter le tableau avec des nombres non ordonnés.
  3. utilisez le rnd.Next pour obtenir la position du numéro qui sera choisi.

Ça marche bien.

Pour obtenir un nombre aléatoire inférieur à 100, utilisez

{
  Random rnd = new Random(DateTime.Now.Millisecond);
  int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 };
  int[] d = new int[10] { 9, 4, 7, 2, 8, 0, 5, 1, 3, 4 };
  textBox1.Text = Convert.ToString(b[rnd.Next(10)]) + Convert.ToString(d[rnd.Next(10)]);
}

et ainsi de suite pour des nombres aléatoires de 3, 4, 5 et 6 ... chiffres.

J'espère que cela aide quelqu'un de manière positive.

0
Arrai