web-dev-qa-db-fra.com

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 retournées. Merci

58
FlyBoy

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.

119
Mark Cidade

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.

12
Albin Sunnanbo

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).

6
Marlon

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.

2
Dork

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!

1
user7969