C#中为Random构造函数传入20参数会对代码运行产生什么影响?
C# Random 构造函数参数作用说明
核心原理
C#的Random类是伪随机数生成器,它并不产生真正意义上的随机数,而是基于固定算法、以一个初始数值(称为「种子」)为起点计算得到一整套伪随机序列。只要种子相同,生成的随机数序列就会完全一致。
两种构造函数的区别
- 原代码中的
Random Number = new Random();:无参构造默认会以系统当前的时间戳作为种子。因为每次运行程序的时间都不一样,所以种子每次都不同,最终生成的骰子点数也会随机变化,符合投掷骰子的预期。 - 修改后的
Random Number = new Random(20);:这里传入的20就是手动指定的种子值。只要种子固定为20,无论你运行多少次程序、在哪台设备上运行,第一次调用Next(1,13)返回的数值都是固定的,后续调用生成的数值序列也会完全相同。
补充优化建议
你当前的代码写法存在隐含问题:如果在短时间内多次调用RollDice方法,每次都新建Random实例的话,系统时间戳可能还没来得及更新,会导致多个实例拿到相同的种子,返回相同的点数。更规范的写法是把Random实例提升为类的静态成员,全局复用同一个实例,示例如下:
// 优化后的代码 using System; namespace ConsoleApp1 { class Program { // 全局复用同一个Random实例 private static Random _number = new Random(); // 生成随机数的子程序 static int RollDice() { return _number.Next(1,13); } // 主程序 static void Main(string[] args) { int Dice = RollDice(); Console.WriteLine("Rolled a {0}", Dice); } } }
内容的提问来源于stack exchange,提问作者EdH
相关产品推荐
相关产品推荐

