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

时间:2011-02-21 07:16:41

标签: c# random

random.Next(0,5)

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

6 个答案:

答案 0 :(得分:116)

maxValue方法中上限的Next() 独占 - 范围包括minValuemaxValue-1和所有数字介于两者之间。

答案 1 :(得分:11)

documentation表示上限是独占的。独占意味着它不包含在可能的返回集中。在这种情况下,使用更多数学符号0 <= x < 5

答案 2 :(得分: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.

如果查看参数,您会看到minValue具有包容性(这就是您的0出现的原因),maxValue是独占的(您的5不会发生)。

答案 3 :(得分:2)

记住它的好方法是将max视为随机数所需的数字量。 所以random.Next(0,2)意味着它从0:0和1开始随机取出2个数字。

答案 4 :(得分:1)

这是很久以前写的,但我还是要发表评论。我认为做出该设计决定的主要原因是,即使不是全部,大多数随机数生成器的核心也会生成从0到2 ^ 32-1的数字。因此,如果指定Int32.MaxValue,则永远不会获得该数字。设计师不能接受一个数字例外的情况,因此他们决定使用专用的支架。问题解决了!

答案 5 :(得分:-1)

当你只是在谷歌中查找“c#random”时,请按照第一个指向欲望方法的链接进入:http://msdn.microsoft.com/en-us/library/aa329893(v=vs.71).aspx

并没有关于上限的排他性的暗示。他们必须在代码中发现错误并使用文档进行更正。

因此,在查看文档时始终检查框架的版本非常重要。即使使用旧版本的框架,也值得查看较新的文档。