我需要生成大量随机数,这些随机数必须介于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相同),然后给出随机数.如上所述,如何在一系列数字范围内生成一系列随机数,而不会获得可预测的结果?
您需要传递包含上限+ 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)