连续new两个类生成随机数时,生成的结果是一样的,这是为什么?

学_无止境_ 2017-05-11 12:48:40
生成随机数类

public class A
{
public int Run() { Random r = new Random(); return r.Next(100); }
}


主函数

class Program
{
static void Main(string[] args)
{
A c1 = new A();
A c2 = new A();
Console.WriteLine(c1.Run());
Console.WriteLine(c2.Run());
}
}

这样运行时产生的随机数是一样的,
但是改成这样子后

A c1 = new A();
Thread.Sleep(100);
​A c2 = new A();

再运行产生的随机数就不一样了,这是为什么?
怎么不用加睡眠就能产生不同的随机数
...全文
331 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_lz 2017-05-11
  • 打赏
  • 举报
回复
1楼就已经告诉你为什么了 而别人也给出了解决方案 还有什么不对的
jianshao810 2017-05-11
  • 打赏
  • 举报
回复
一般 Thread.Sleep(10); 就不会一样。
夏天的枫 2017-05-11
  • 打赏
  • 举报
回复
引用 7 楼 zhangxxxxxxu 的回复:
引用 5楼夏天的枫 的回复:
Guid或许能够满足你。。。
Guid这个方法可能过于复杂了 楼上加成static 的就可以了
就几句代码就可以保证无论这次运行还是下次运行还是一起机器一起运行生成的ID是唯一。。。
学_无止境_ 2017-05-11
  • 打赏
  • 举报
回复
引用 5楼夏天的枫 的回复:
Guid或许能够满足你。。。
Guid这个方法可能过于复杂了 楼上加成static 的就可以了
学_无止境_ 2017-05-11
  • 打赏
  • 举报
回复
引用 4楼wang_peng_yl 的回复:
public class A { Random r; public int Run() { if (r == null) { r = new Random(); } return r.Next(100); } } A c1 = new A(); Console.WriteLine(c1.Run()); Console.WriteLine(c1.Run());
这样虽然能输出不同的随机数 但是这样和题意不相符啊
夏天的枫 2017-05-11
  • 打赏
  • 举报
回复
Guid或许能够满足你。。。
wang_peng_yl 2017-05-11
  • 打赏
  • 举报
回复
public class A { Random r; public int Run() { if (r == null) { r = new Random(); } return r.Next(100); } } A c1 = new A(); Console.WriteLine(c1.Run()); Console.WriteLine(c1.Run());
  • 打赏
  • 举报
回复
public class A
{
    static Random r = new Random();
    public int Run() { return r.Next(100); }
}
xuzuning 2017-05-11
  • 打赏
  • 举报
回复
因为 Random 产生的是伪随机数序列,是一个多项式迭代的结果 相同的种子(初始值)将产生相同的序列
xuggzu 2017-05-11
  • 打赏
  • 举报
回复
因为Random无参数new是以系统时间为随机种子来产生随机数的。 如果计算机运行足够快,几行连续代码之间时差小于系统时间分辨率,即2次Random的种子是一样的,那么产生的随机数自然相同。sleep后随机数不一样也就是为了让2次之间时差让缺省的系统时间能分辨到。 如果不用通过时间来产生不同随机数,可以用其它肯定会不同的值作为种子。或者2次用同一个Random对象,不同.Next()会有不同结果。
正怒月神 2017-05-11
  • 打赏
  • 举报
回复
1楼就已经告诉你为什么了 而别人也给出了解决方案 还有什么不对的

110,535

社区成员

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

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

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