| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4529 人关注过本帖
标题:C#中如何生成一串不同的随机数?
只看楼主 加入收藏
有敌手
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2008-2-12
收藏
 问题点数:0 回复次数:3 
C#中如何生成一串不同的随机数?
我用
int []i = new int[20],j;
Random r = new Random();

for(j = 0; j < 20; j++)
i[] = r.next(0,20);

for(int j = 0; j < 20; j++)
Console.writeline(i[j]);

但是输出来的数字都是一样的。。。
搜索更多相关主题的帖子: 随机数 
2008-10-23 19:35
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
两个种子用时间取异MSDN的说法,自己去查下。


仁者乐膳,智者乐睡。我都爱~
2008-10-23 20:13
铲铲
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:506
专家分:0
注 册:2006-5-2
收藏
得分:0 
Random对象如果使用默认无参数的构造函数,种子可能相同,因而产生的随机数就会相同。
虽然,在MSDN中有释义,如果使用无参数的构造函数,则使用时间相关的种子,但不知道微软所谓时间相关的种子在多大程度上和时间相关,有可能其时间尺度很大,在两次初始化对象是,种子并没有发生变化,生成随机数即相同。

要使得Random生成符合要求,我们可以自己创造种子:
Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
unchecked关键字告诉运行时环境不要检查数字运算溢出,从而生成一个int整形作为种子。这个数字每100毫微秒变化一次。

Random产生的伪随机数足够日常使用,但如果作为密码算法的一部分,它的函数显得太简单,所产生的伪随机数不够随机。如果你要生成适合加解密算法的足够强度的伪随机数,则使用从 System.Security.Cryptography.RandomNumberGenerator 派生的类,如 System.Security.Cryptography.RNGCryptoServiceProvider。

另外要注意一点!Random应在尽可能大的范围内初始化,如在一个类的初始化时即初始化Random,然后再该类的任何地方使用它,直到该类不再使用而销毁,而不要在每次需要使用随机数时才初始化它。
收到的鲜花
  • 小仙2008-10-23 21:19 送鲜花  49朵   附言:我很欣赏~

铲铲是也
2008-10-23 21:16
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
[bo][un]铲铲[/un] 在 2008-10-23 21:16 的发言:[/bo]

另外要注意一点!Random应在尽可能大的范围内初始化,如在一个类的初始化时即初始化Random,然后再该类的任何地方使用它,直到该类不再使用而销毁,而不要在每次需要使用随机数时才初始化它。
 

就是说要在一个时间差内获取种子,这样好理解些。铲铲去看下我发的帖子看有没什么问题~
https://bbs.bccn.net/thread-236463-1-1.html 写随机数的。


仁者乐膳,智者乐睡。我都爱~
2008-10-23 21:22
快速回复:C#中如何生成一串不同的随机数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012462 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved