哭死。。。让随机数整疯了。。。

loading1024 2008-09-10 11:08:06
一开始使用random来产生随机数,可是后来发现怎么随机数都一样,查了下原因,是因为程序运行太快,导致随机数产生时间间隔过小。
请问各位高手谁知道怎么生成真随机数,或者即使时间间隔很小也能生成真正的随机数呢(不是连续几个一样的)?
TNND机器太快也有坏处orz
...全文
140 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
brallow 2008-09-10
  • 打赏
  • 举报
回复
同一个Radom对象在不同时刻生成的随机数一般情况下是不同的,这点几乎可以保证。
你如果生成多个不同的Radom,则生成随机数的相同的概率高得多。
LovingAlison 2008-09-10
  • 打赏
  • 举报
回复
哎 贴了两次还是不满意 你凑合着看吧 肯定可以运行
LovingAlison 2008-09-10
  • 打赏
  • 举报
回复
仔细看下面两段代码
【一】这个不会产生重复

private void button3_Click(object sender, EventArgs e)
{
string rdmstring = string.Empty;
Random rdm = new Random();
for (int i = 0; i < 4; i++)
{
rdmstring+=rdm.Next(9).ToString();
}
button3.Text = rdmstring;
}



【二】这个会产生重复

private void button3_Click(object sender, EventArgs e)
{
string rdmstring = string.Empty;
for (int i = 0; i < 4; i++)
{
Random rdm = new Random();
rdmstring+=rdm.Next(9).ToString();
}
button3.Text = rdmstring;
}




LovingAlison 2008-09-10
  • 打赏
  • 举报
回复
仔细看下面两段代码
【一】这个不会产生重复

private void button3_Click(object sender, EventArgs e)
{
string rdmstring = string.Empty;
Random rdm = new Random();
for (int i = 0; i < 4; i++)
{
rdmstring+=rdm.Next(9).ToString();
}
button3.Text = rdmstring;
}


【二】这个会产生重复

private void button3_Click(object sender, EventArgs e)
{
string rdmstring = string.Empty;
for (int i = 0; i < 4; i++)
{
Random rdm = new Random(); rdmstring+=rdm.Next(9).ToString();
}
button3.Text = rdmstring;
}


wdgphc 2008-09-10
  • 打赏
  • 举报
回复
你如果写成
Random r = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine(r.Next(0, 100).ToString());

机器快也生成的不一样.


如果写成
for (int i = 0; i < 10; i++)
{
Random r = new Random();
Console.WriteLine(r.Next(0, 100).ToString());
}
就会很多一样的.
Heaven_feather 2008-09-10
  • 打赏
  • 举报
回复
Random 用静态的就可以了
private static Random count = new Random;
LovingAlison 2008-09-10
  • 打赏
  • 举报
回复
不是因为太快吧 是因为你代码顺序不对 我之前碰到过这样的问题 调整下顺序就好了
微软不至于连这个都处理不好
我先写一个 好了发给你
正宗熊猫哥 2008-09-10
  • 打赏
  • 举报
回复
应该是LZ的代码问题。没听过运行太快生成不了的
rockyvan 2008-09-10
  • 打赏
  • 举报
回复
lonehare 2008-09-10
  • 打赏
  • 举报
回复
放大随机范围
yzh313 2008-09-10
  • 打赏
  • 举报
回复
和机器快慢没有关系,应该是你的程序有问题,把代码贴上来看看,
优途科技 2008-09-10
  • 打赏
  • 举报
回复
既然太快,那就让他Sleep一下。哈哈。。。
h_w_king 2008-09-10
  • 打赏
  • 举报
回复
只用一个随机因子.
wackyboy 2008-09-10
  • 打赏
  • 举报
回复
你让他Sleep一下
loading1024 2008-09-10
  • 打赏
  • 举报
回复
谢谢楼上各位,确实如各位所说,random应该用全局的而不能每次都new一个。
之所以我总是出现连续一样的,是因为------------------------------------------------我TMD每次显示出来时都sort了。。。。。

泪奔

结贴
accomp 2008-09-10
  • 打赏
  • 举报
回复
应该是写的不对,楼上的方法可用
egmkang 2008-09-10
  • 打赏
  • 举报
回复
构造函数里面添加一个时间(现在时刻)参数,当种子
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wdgphc 的回复:]
你如果写成
Random r = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine(r.Next(0, 100).ToString());

机器快也生成的不一样.


如果写成
for (int i = 0; i < 10; i++)
{
Random r = new Random();
Console.WriteLine(r.Next(0, 100).ToString());
}
就会很多一样的.
[/Quote]
注册失败 2008-09-10
  • 打赏
  • 举报
回复
你要生成什么样子的随机分布?
正态分布还是均匀分布还是没有要求?
xhueducls 2008-09-10
  • 打赏
  • 举报
回复
new random(guid.newguid().gethashcode()).next();

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧