我正在编写一个方法,它将生成1到6之间的unsigned int(包括边界).我现有的方法如下.
private static Random random = new Random();
...
private static uint GetRandomChannel()
{
return Convert.ToUInt32(random.Next(1, 6));
}
Run Code Online (Sandbox Code Playgroud)
我已经运行了这个方法一千次,我得到数字1到5但从未得到6.为什么会发生这种情况,我该如何解决?
第二个参数random.Next()是独占上限.
参数
minValue:返回的随机数的包含下限.
maxValue:返回的随机数的独占上限.maxValue必须大于或等于minValue.
返回值
大于或等于minValue且小于maxValue的32位有符号整数; 也就是说,返回值的范围包括minValue但不包括maxValue.如果minValue等于maxValue,则返回minValue.
这意味着random.Next(1, 6)只返回n范围内的值1 <= n < 6.
因此,对于您的模具滚动模拟,您将需要使用
random.Next(1, 7)
Run Code Online (Sandbox Code Playgroud)
注意:此API的设计很奇怪.它有特殊的案例处理minValue == maxValue,似乎不必要地使API复杂化.如果我设计了这个API,我会将这两个参数都包含在内.这将导致令人愉悦的对称性,并允许覆盖整个范围的随机数int.