C# 生成随机整数时无法包含上限
我正在编写一个方法,该方法将生成1到6之间的无符号int(包括边界)。我目前的方法如下C# 生成随机整数时无法包含上限,c#,random,C#,Random,我正在编写一个方法,该方法将生成1到6之间的无符号int(包括边界)。我目前的方法如下 private static Random random = new Random(); ... private static uint GetRandomChannel() { return Convert.ToUInt32(random.Next(1, 6)); } 我已经运行了一千次这个方法,我得到
private static Random random = new Random();
...
private static uint GetRandomChannel()
{
return Convert.ToUInt32(random.Next(1, 6));
}
我已经运行了一千次这个方法,我得到了数字1到5,但从来没有得到6。为什么会发生这种情况?我如何修复它?的第二个参数是一个排他性上限
参数
minValue:返回的随机数的包含下限
maxValue:返回的随机数的唯一上界。maxValue必须
大于或等于最小值
返回值
大于或等于minValue且小于maxValue的32位有符号整数;也就是说,返回值的范围包括minValue,但不包括maxValue。如果minValue等于maxValue,则返回minValue
这意味着random.Next(1,6)
将只返回n
范围1内的值,您无法“修复”该值;这就是我们要做的:
大于或等于零且小于的32位有符号整数
最大值
因此,如果要在[a,b]中生成一个随机整数,则需要使用。根据MSDN,下一步(a,1+b)
,上界是独占的,而下界是包含的
因此,您的代码应该是:
return Convert.ToUInt32(random.Next(1, 7));
根据MSDN文档,random.Next
函数返回的值严格小于MaxValue
(在您的情况下为6)。根据,下限是包含的,上限是独占的。这意味着随机。Next(下一个,上一个)将返回较低的数字,但它保证永远不会返回较高的数字。更令人失望的是,我一直在调用random。Next(n,n+1)重复,结果似乎根本不是随机的@西努,这完全是随机的!唯一无法与真实RNG区分的伪RNG!;-)
return Convert.ToUInt32(random.Next(1, 7));