Next方法的随机数问题(.NET Framework)

goo*_*rld 0 .net c# random

我需要生成大量随机数,这些随机数必须介于1和int.MaxValue之间.传递给Random类的Next方法的参数并不总是相同的.在一个论坛中,论点可能如下:

Next(1, int.MaxValue);
Run Code Online (Sandbox Code Playgroud)

在另一个他们可能也是:

Next(1, 2);
Run Code Online (Sandbox Code Playgroud)

这里的问题是,无论何时传递1和2或99和100之类的值,较低的数字始终是方法返回的"随机"数字.原因是因为该方法从最大值中减去1(除非min和max相同),然后给出随机数.如上所述,如何在一系列数字范围内生成一系列随机数,而不会获得可预测的结果?

Ree*_*sey 6

您需要传递包含上限+ 1,即:

var result = rand.Next(1, 2+1); // Returns 1 or 2
var result2 = rand.Next(99, 101); // Returns 99 or 100
Run Code Online (Sandbox Code Playgroud)

请注意,这int.MaxValue当然不适用.没有办法Random直接回归int.MaxValue.要获得[0,int.MaxValue]结果,您需要执行以下操作:

var result = rand.Next(-1, int.MaxValue) + 1;
Run Code Online (Sandbox Code Playgroud)

  • 我不认为.NET会想int.MaxValue + 1. (3认同)