为什么在Random.Next()中包含minValue,而不包含maxValue ?

本文关键字:包含 minValue maxValue Random Next 为什么 | 更新日期: 2023-09-27 18:02:13

这对我来说有点奇怪。我相信我很快就会习惯的,但我只是想知道为什么它是这样的

为什么在Random.Next()中包含minValue,而不包含maxValue ?

原因1)maxValue - minValue给出了范围内可能项目的数量,因此您可以使用如下代码:

var randomItemFromArray = MyArray[random.Next(0, MyArray.Length)];

如果上界是包含的,那么这样做看起来有点笨拙/奇怪。

原因2)更容易编写

原因3)当使用浮点数时,它确保了可能性的均匀分布-

更多信息请参见随机数范围的独占上界

假设您有几个范围,例如

  • 从0
  • 开始
  • 从100(感兴趣范围)开始
  • 从500(下一个范围)开始
  • 从1000
  • 开始

我们必须从第二个范围中得到一个随机值,我们所要做的就是

random.Next(100, 500);

。第一个参数是范围开始,第二个参数是下一个范围开始;如果范围是复数就很方便了:我们只需要知道每个的位置范围开始(我们不需要计算精确包含的上边界,但可以说"向上,但不包括下一个范围")。例如,我们想要得到2016年2月的随机时刻(最多秒):

DateTime start     = new DateTime(2016, 2, 1);
// Please notice how much easier it is to put "1 Mar" than "29 Feb 23:59:59"
DateTime startNext = new DateTime(2016, 3, 1);
// Please notice: just subtraction
DateTime random = start + 
  TimeSpan.FromSeconds(random.Next((startNext - start).TotalSeconds));