为什么C#的随机下限包容性,但上限是否独占?

时间:2015-03-27 14:59:40

标签: c# random

以此代码为例:

Random rnd = new Random();
int rndNumber = rnd.Next(0,101);

可以预期会发生以下任何一种情况:
-rndNumber包含0到101之间的随机整数 -rndNumber包含1到100之间的随机整数

实际发生的是,rndNumber包含0到100之间的随机整数。为什么会出现这种情况?

我理解上限是排他性的,但为什么下限包括在内?为什么这不一致?

1 个答案:

答案 0 :(得分:10)

此方法与使用零作为其初始元素的编号方案一致。这在几种情况下很方便,因为您不必进行任何算术运算或面临罕见的逐个错误,例如

当您选择数组的随机元素时:

var rndElement = myArray[rnd.Next(0, myArray.Length)];

在多个点拆分间隔时,从每个子间隔中选择随机元素:

var endpoints = new[] {0, 10, 17, 36, 80};
for (int i = 0 ; i+1 < endpoints.Length ; i++) {
    var from = endpoints[i];
    var to = endpoints[i+1];
    Console.WriteLine("({0}..{1}) : {2}", from , to, rnd.Next(from, to));
}

它还可以更轻松地计算可以生成多少个不同的值。