Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Random.Next-从不返回上限?_C#_Random - Fatal编程技术网

C#Random.Next-从不返回上限?

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”并按照第

它从不返回5(但有时返回0)。为什么?我认为这些只是可以返回的边界值。感谢对于
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.