C#随机数 出现同一个数?
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 10:28:07
C#随机数 出现同一个数?
C#随机数声明放在for循环里总是出现同一个数,把Random R=new Random() 放在FOR循环外面 就可以了生成不同的随机数 是怎么回事?代码如下
C#随机数声明放在for循环里总是出现同一个数,把Random R=new Random() 放在FOR循环外面 就可以了生成不同的随机数 是怎么回事?代码如下
编程中的随机数一般指的是伪随机数,会根据初始“种子”(Random Seed)和特定的迭代算法来得到随机数.
比如初始化种子是 20,规定算法是乘以 10 后对 7 取模,那么 random.Next() 第一次得到 20*10%7=4、第二次等到 4*10%7=5、第三次得到 5*10%7=1、第四次得到 1*10%7=3……得到的这些数在人们看来就已经是随机的了,但实际上它们并非真的随机了,因为当种子一定、算法一定的条件下,得到的每个数永远是这个顺序.
所以关键点就在于如何确定种子和迭代算法.算法一般由语言内部的类库自己规定好,编程者只需要传入种子就可以得到一系列的伪随机数了.
C# 里的 Random 类有个重载的构造函数,有一个参数代表种子;如果不规定这个种子,那么默认以当前的 DateTime 为种子.那么问题就来了,要知道今天的计算机CPU运算速度是非常快的,如果你在 for 循环里重复定义一个新的 Random 类,很可能当前的种子(DateTime)还没来得及发生变化,这样你 random.Next() 得到的第一个随机数永远是固定的.
这样解释题主明白否?
再问: 基本明白了,如果要在FOR循环里 定义一个RANDOM类 有什么办法能他不只出现同一个数么? 非常谢谢
再答: 1、为什么要在 For 循环里定义 Random 类?
2、自己写确定种子,比如种子可以是 for 循环的那个 i 的值的100倍再除以3之类的,保证每次循环种子都不一样。
比如初始化种子是 20,规定算法是乘以 10 后对 7 取模,那么 random.Next() 第一次得到 20*10%7=4、第二次等到 4*10%7=5、第三次得到 5*10%7=1、第四次得到 1*10%7=3……得到的这些数在人们看来就已经是随机的了,但实际上它们并非真的随机了,因为当种子一定、算法一定的条件下,得到的每个数永远是这个顺序.
所以关键点就在于如何确定种子和迭代算法.算法一般由语言内部的类库自己规定好,编程者只需要传入种子就可以得到一系列的伪随机数了.
C# 里的 Random 类有个重载的构造函数,有一个参数代表种子;如果不规定这个种子,那么默认以当前的 DateTime 为种子.那么问题就来了,要知道今天的计算机CPU运算速度是非常快的,如果你在 for 循环里重复定义一个新的 Random 类,很可能当前的种子(DateTime)还没来得及发生变化,这样你 random.Next() 得到的第一个随机数永远是固定的.
这样解释题主明白否?
再问: 基本明白了,如果要在FOR循环里 定义一个RANDOM类 有什么办法能他不只出现同一个数么? 非常谢谢
再答: 1、为什么要在 For 循环里定义 Random 类?
2、自己写确定种子,比如种子可以是 for 循环的那个 i 的值的100倍再除以3之类的,保证每次循环种子都不一样。