C#随机数 出现同一个数???
C#随机数声明放在for循环里总是出现同一个数,把RandomR=newRandom()放在FOR循环外面就可以了生成不同的随机数是怎么回事?代码如下...
C#随机数声明放在for循环里总是出现同一个数, 把Random R=new Random() 放在FOR循环外面 就可以了生成不同的随机数 是怎么回事?代码如下
展开
2个回答
展开全部
编程中的随机数一般指的是伪随机数,会根据初始“种子”(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() 得到的第一个随机数永远是固定的。
这样解释题主明白否?
比如初始化种子是 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之类的,保证每次循环种子都不一样。
展开全部
可能你对随机理解有些误会。 随机数顾名思义是随机出现的并不是出现过就不会再出现。
随机是一种概率 并不会把Random R=new Random() 放在FOR循环外面 就可以了生成不同的随机数 。如你试设的随机范围越小则得到的相同的数的概率会越大 。你现在程序中是(0 -9)中的 一个
所以每个相同的数出现一个有1/9的概率。
如何你要生成一个文件的名称 建议你是时间+随机数。这样就会不重复了。
(以时间的方法可供参考):
// 随机获取一个图片名称
private string generateFileName(string fileName) {
DateTime now = DateTime.Now;
return String.Format(
"{0}_{1}_{2}_{3}", now.Minute, now.Second, now.Millisecond, fileName
);
}
随机是一种概率 并不会把Random R=new Random() 放在FOR循环外面 就可以了生成不同的随机数 。如你试设的随机范围越小则得到的相同的数的概率会越大 。你现在程序中是(0 -9)中的 一个
所以每个相同的数出现一个有1/9的概率。
如何你要生成一个文件的名称 建议你是时间+随机数。这样就会不重复了。
(以时间的方法可供参考):
// 随机获取一个图片名称
private string generateFileName(string fileName) {
DateTime now = DateTime.Now;
return String.Format(
"{0}_{1}_{2}_{3}", now.Minute, now.Second, now.Millisecond, fileName
);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询