random.Next(0,5)
它永远不会返回5(但有时会返回0.)为什么?我认为这些只是可以返回的边界值。感谢
答案 0 :(得分:116)
maxValue
方法中上限的Next()
独占 - 范围包括minValue
,maxValue-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
并没有关于上限的排他性的暗示。他们必须在代码中发现错误并使用文档进行更正。
因此,在查看文档时始终检查框架的版本非常重要。即使使用旧版本的框架,也值得查看较新的文档。