78 votes

C# Random.Next - ne renvoie jamais la limite supérieure ?

random.Next(0,5)

Il ne renvoie jamais le 5 (mais renvoie parfois le 0.) Pourquoi ? Je pensais que ce ne sont que des valeurs limites qui peuvent être renvoyées. Merci

149voto

Mark Cidade Points 53945

Le maxValue pour la limite supérieure dans la méthode Next() est exclusif - la plage comprend minValue , maxValue-1 , et tous les nombres intermédiaires .

14voto

Albin Sunnanbo Points 30722

La documentation indique que la limite supérieure est exclusive. Exclusif signifie qu'il n'est pas inclus dans l'ensemble de retour possible. Dans une notation plus mathématique 0 <= x < 5 dans ce cas.

6voto

Marlon Points 11528

Directement à partir de la documentation :

  Summary:
   Returns a random number within a specified range.

 Parameters:
   minValue:
     The inclusive lower bound of the random number returned.

   maxValue:
     The exclusive upper bound of the random number returned. maxValue must be
     greater than or equal to minValue.

 Returns:
     A 32-bit signed integer greater than or equal to minValue and less than maxValue;
     that is, the range of return values includes minValue but not maxValue. If
     minValue equals maxValue, minValue is returned.

Si vous regardez les paramètres, vous verrez que minValue est inclusif (c'est pourquoi votre 0 se produit) et maxValue est exclusif (votre 5 ne se produit jamais).

2voto

Dork Points 719

Un bon moyen de s'en souvenir est de considérer max comme le nombre de nombres à partir duquel il prend un nombre aléatoire. Donc random.Next(0,2) signifie qu'il prend au hasard sur 2 nombres à partir de 0 : 0 et 1.

1voto

user7969 Points 41

Cela a été écrit il y a longtemps mais je commenterai quand même. Je pense que la principale raison de cette décision de conception est que la plupart sinon tous les générateurs de nombres aléatoires génèrent des nombres de 0 à 2^32-1. Donc, si vous spécifiez Int32.MaxValue, vous n'obtiendrez jamais ce nombre. Avoir une exception pour un numéro ne devait pas être acceptable pour les concepteurs, ils ont donc décidé d'exclure le support. Problème résolu!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X