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 retournées. Merci
maxValue
pour la borne supérieure de la méthode Next()
est exclusif - la plage comprend minValue
, maxValue-1
, et tous les nombres entre les deux.
documentation indique que la limite supérieure est exclusive. Exclusif signifie qu'il n'est pas inclus dans le jeu de retour possible. Dans une notation plus mathématique 0 <= x < 5
dans ce cas.
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).
Un bon moyen de s'en souvenir est de considérer max comme la quantité de nombres dont il prend un nombre aléatoire. Donc random.Next(0,2)
signifie qu'il faut prendre au hasard sur 2 nombres à partir de 0: 0 et 1.
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 des générateurs de nombres aléatoires, sinon tous, génèrent des nombres de 0 à 2 ^ 32-1. Donc, si vous spécifiez Int32.MaxValue, vous n'obtiendrez jamais ce nombre. Le fait d'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!