random.Next(0,5)
它从未返回5(但有时会返回0)。为什么?我认为这些只是可以返回的边界值。谢谢
random.Next(0,5)
它从未返回5(但有时会返回0)。为什么?我认为这些只是可以返回的边界值。谢谢
Next()
方法中上限的maxValue
是排除在外的——范围包括minValue
,maxValue-1
和它们之间的所有数字。
array[random.Next(0, array.Length)]
。 - Mark Cidade文档中指出,上限是“排除的”。 排除意味着它不包括在可能的返回集合中。在更数学的符号表示中,0 <= x < 5
在本例中。
minValue
而不是 maxValue
? - qxzminValue
= maxValue
。在这种情况下,返回minValue
或maxValue
并不重要,因为它们相等。minValue <= x < maxValue
不成立。如果minValue
= maxValue
= 0,则返回x = 0,但0 < 0不成立。 - jasdefer直接从文档中摘录:
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从未出现)。记住这个方法的好办法是将max视为从中取随机数的数字数量。
因此,random.Next(0,2)
的意思是从0和1两个数中随机选取一个数。
虽然这篇文章写得很久远,但我还是想发表一下评论。我认为该设计决策的主要原因是,大多数随机数生成器在其核心生成0到2^32-1之间的数字。因此,如果您指定Int32.MaxValue,您将永远不会获得那个数字。对于一个数字有一个例外是无法被设计师接受的,因此他们决定拥有括号是排除性的。问题解决了!
当你在谷歌上搜索“c# random”,并跟随第一个链接到所需的方法时,你会来到这里:http://msdn.microsoft.com/en-us/library/aa329893(v=vs.71).aspx
而且没有关于上限排他性的提示。他们必须已经在代码中发现了错误,并通过文档进行了更正。
因此,在查看文档时,始终检查框架的版本非常重要。即使使用旧版本的框架,也值得查看更新的文档。