C#Random.Next - 永远不会返回上限?

Fly*_*Boy 61 c# random

random.Next(0,5)
Run Code Online (Sandbox Code Playgroud)

它永远不会返回5(但有时会返回0.)为什么?我认为这些只是可以返回的边界值.谢谢

Mar*_*ade 122

maxValue用于上界的Next()方法是独特的 -the范围包括minValue,maxValue-1,以及两者之间的所有数字.

  • 我能想到的一个原因是`array [random.Next(0,array.Length)]` (15认同)
  • 有没有想过他们为什么选择一个包容性,另一个独家?看起来有点特别...... (11认同)
  • 名称maxValue(作为参数被调用)正在积极地误导.它应该被称为上限.因为最大值始终是集合的元素. (6认同)
  • 为了增加混淆,如果为minValue和maxValue传递相同的值,则maxValue不再是独占的.描述"返回特定范围内的随机整数"也具有误导性. (5认同)

Alb*_*nbo 12

文件称,上限是排斥的.独占意味着它不包含在可能的返回集中.在0 <= x < 5这种情况下,在更多的数学符号.

  • @jasdefer在这种情况下,为什么它会返回`minValue`而不是`maxValue`? (5认同)

Mar*_*lon 6

直接来自文档:

 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.
Run Code Online (Sandbox Code Playgroud)

如果你看一下这些参数,你就会发现它minValue是包容性的(这就是你的0出现的原因)并且maxValue是独占的(你的5永远不会发生).