C#Random.Next-从不返回上限?
它从不返回5(但有时返回0)。为什么?我认为这些只是可以返回的边界值。感谢对于C#Random.Next-从不返回上限?,c#,random,C#,Random,它从不返回5(但有时返回0)。为什么?我认为这些只是可以返回的边界值。感谢对于Next()方法中的上限maxValue是独占的-范围包括minValue、maxValue-1,以及介于两者之间的所有数字。表示上限是独占的。独占意味着它不包括在可能的返回集中。直接从文档中使用数学符号0: random.Next(0,5) 如果你查看参数,你会发现minValue是包含的(这就是为什么你的0出现的原因),maxValue是独占的(你的5从来没有出现过)。当你在谷歌中查找“c#random”并按照第
Next()
方法中的上限maxValue
是独占的-范围包括minValue
、maxValue-1
,以及介于两者之间的所有数字。表示上限是独占的。独占意味着它不包括在可能的返回集中。直接从文档中使用数学符号0:
random.Next(0,5)
如果你查看参数,你会发现minValue
是包含的(这就是为什么你的0出现的原因),maxValue
是独占的(你的5从来没有出现过)。当你在谷歌中查找“c#random”并按照第一个链接到你在这里得到的欲望方法时:
也没有关于上限的排他性的暗示。他们一定发现了代码中的错误,并用文档进行了更正
因此,在查看文档时,务必检查框架的版本。即使在使用旧版本的框架时,也值得看看最新的文档。 记住它的好方法是把max看作是随机数的数量。
所以random。Next(0,2)
意味着它从从0:0和1开始的两个数字中抽取随机数。这是很久以前写的,但我还是要评论一下。我认为这种设计决策的主要原因是,大多数(如果不是全部的话)随机数发生器的核心都会生成0到2^32-1的数字。因此,如果指定Int32.MaxValue,则永远不会得到该数字。对于一个数字有一个例外肯定是设计师不可接受的,所以他们决定将括号排他。问题解决了 为什么要这样做?这是不必要的混乱,为什么?可能是因为:var randomValue=myArray[rand.Next(0,myArray.Length)];我发现这个文档比重新键入代码、触发intellisense或搜索MSDN库更快。调试或读取代码时通常不会键入代码。我直觉地把“最大值”理解为“最大可能值”,而不是“最大值减一”。没必要把OP告诉RTFM。我知道我来晚了,但我真的被这件事吓坏了。和世界上其他人一样,我将“maxValue”理解为该函数返回的最大数字。我很确定我在生产中因为这个原因破坏了代码。奇怪的是,如果minValue==maxValue,它将返回maxValue。同样地,下一步(0)(表面上隐式的minValue为0将只返回0。以一种无关紧要的方式非常不可靠。按照您发布的链接,发现以下内容:返回值-大于或等于minValue且小于maxValue的32位有符号整数;也就是说,返回值的范围包括minValue,但不包括maxValue。如果minValue等于maxValue,则返回minValue。"正如dbasnett所说,文档确实在这里指定了行为。不仅如此,这是定义随机数之类的范围的传统方法。我认为,你认为这实际上是一个错误,这是一个糟糕的错误。允许maxValue与minValue相同是一种不直观的做法,因为这会导致有效的v值集值总是空的关于他们为什么选择一个包含,另一个独占?似乎有点奇怪…我认为其中的一个原因是array[random.Next(0,array.Length)]
名称maxValue(如参数所称)具有误导性。应称之为上界。因为最大值始终是集合的一个元素。@AntonioNakicAlfirevic-有关此行为背后的原因,请参见此处:若要增加混淆,请为minValue和maxValue传递相同的值,则maxValue不再是独占的。描述如下:“返回特定范围内的随机整数"也有误导性。对于min=max,这是不正确的。如果minValue等于maxValue,则返回minValue。@在这种情况下,为什么它返回minValue
,而不是maxValue
?@qxz我只是在谈论这个情况:minValue
=maxValue
。在这里,无论是minValue
还是maxValue
e
返回,因为它们相等。minValue只有在给定的下限为0时,这才是记住它的好方法。例如random不是真的。Next(1,2)从1开始随机选择2个数字。
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.