当前位置:编程学习 > C#/ASP.NET >>

关于Random产生随机数的问题,请高手指点

请问一下为什么Random的对象调用nextdouble()方法得到值一样
如:
   main()
{
 int a,b;
 Random rnd1=new Random();
 a=(int)(rnd1.nextdouble()*10);
 Random rnd2=new Random();
 b=(int)(rnd1.nextdouble()*10);
 Console.WriteLine("a="+a+",b="+b);
}
a和b的值总是一样的
怎么样才能让a和b不一样呢 --------------------编程问答--------------------
main() 

int a,b; 
Random rnd1=new Random(); 
a=(int)(rnd1.nextdouble()*10); 
b=(int)(rnd1.nextdouble()*10); 
Console.WriteLine("a="+a+",b="+b); 
--------------------编程问答--------------------
// 不要每次都初始化,因为默认是以计算机时钟为随机数种子的。
// 而你的计算机太快了,两次初始化会取到同样的种子,造成产生的随机数一样。

static void Main() 

  Random rnd1 = new Random();  // 只需初始化一次
  int a = (int)(rnd1.NextDouble()*10); 
  int b = (int)(rnd1.NextDouble()*10); 
  Console.WriteLine("a = {0}, b = {1}", a, b); 
}
--------------------编程问答--------------------
Random.Next()                            // 返回非负随机整数(Int32)。
Random.Next(int maxValue)                // 返回一个小于所指定最大值的非负随机整数。
Random.Next(int minValue, int maxValue)  // 返回一个指定范围内的随机整数(minValue≤返回值<maxValue)。
--------------------编程问答-------------------- 谢谢
再请教一下哦
main() 

int a,b; 
Random rnd1=new Random(); 
a=(int)(rnd1.nextdouble()*10); 
Random rnd2=new Random();
b=(int)(rnd2.nextdouble()*10); 
Console.WriteLine("a="+a+",b="+b); 

a和b的结果也是完全一样的
另外请教楼上的高手为什么只初始化一次就可以了呀 --------------------编程问答-------------------- 赞成楼上的,用一个Random对象来做 --------------------编程问答--------------------
引用 4 楼 cherryxiaoyu 的回复:
谢谢 
再请教一下哦 
main() 

int a,b; 
Random rnd1=new Random(); 
a=(int)(rnd1.nextdouble()*10); 
Random rnd2=new Random(); 
b=(int)(rnd2.nextdouble()*10); 
Console.WriteLine("a="+a+",b="+b); 

a和b的结果也是完全一样的 
另外请教楼上的高手为什么只初始化一次就可以了呀


一个对象依次取两次随机数,取到相同的情况当然少了 --------------------编程问答-------------------- 下次以上次的结果为种子.所以一次足以. --------------------编程问答--------------------
引用 4 楼 cherryxiaoyu 的回复:
a和b的结果也是完全一样的 


我在2楼已经回答你为什么结果也是完全一样的了:

引用 2 楼 wuyi8808 的回复:
// 不要每次都初始化,因为默认是以计算机时钟为随机数种子的。
// 而你的计算机太快了,两次初始化会取到同样的种子,造成产生的随机数一样。
--------------------编程问答-------------------- main() 

int a,b; 
Random rnd1=new Random(); 
a=(int)(rnd1.nextdouble()*10); 
Random rnd2=new Random(); 
b=(int)(rnd2.nextdouble()*10); 
Console.WriteLine("a="+a+",b="+b); 

--------------------编程问答-------------------- 非常感谢
谢谢了各位 --------------------编程问答-------------------- 非常感谢
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,