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

比较怪异的现象

    class T
    {
        private double[] d = new double[3];

        public double[] D
        {
            get { return d; }
            set { d = value; }
        }

    }
        static void Main(string[] args)
        {
            T t = new T();
            for (int i = 0; i < t.D.Length; i++)
            {
                t.D[i] = new Random().NextDouble();
            }
            for (int i = 0; i < t.D.Length; i++)
            {
                Console.WriteLine(t.D[i]);
            }
                Console.ReadLine();
        }
这个程序为什么我debug执行D中会有三个不同的值,直接执行D中的三个值却每次都是相同的呢 --------------------编程问答-------------------- 可能是随机种子的问题。。。

时间间隔太短导致的。。。

--------------------编程问答-------------------- 答案:

http://msdn.microsoft.com/zh-cn/library/system.random.aspx --------------------编程问答-------------------- 是的。new Random是使用当前的时钟来作为种子的。

你的代码可以改一下:
  T t = new T();
  Random Rnd = new Random(); 
  for (int i = 0; i < t.D.Length; i++)
  {
  t.D[i] = Rnd.NextDouble();
  }
  for (int i = 0; i < t.D.Length; i++)
  {
  Console.WriteLine(t.D[i]);
  }


或者你把Rnd定义为static的更方便。 --------------------编程问答-------------------- sp1234“出关”了?

呵呵,好久不见了! --------------------编程问答-------------------- 因为两次取随机数的时间间隔太小了,所以取到的是相同值:
		Response.Write(new Random().NextDouble());
for (int i = 0; i < 10000000; i++)
;
Response.Write("<br/>" + new Random().NextDouble());

如上面的代码,如果中间的for循环执行次数少一个0,就会出现相同的结果。 --------------------编程问答-------------------- 默认种子值是从系统时钟派生而来的,具有有限的分辨率。因此,通过调用默认构造函数而频繁创建的不同 Random 对象将具有相同的默认种子值,因而会产生几组相同的随机数。 使用单个 Random 对象生成所有随机数可以避免此问题。 
这个是MSDN文档里对Random的一段描述,所以你所说的怪异现象是完整正常的,如果你要保证产生不同的数,代码应该这样写:
static void Main(string[] args)
  {
  T t = new T();
  Random rd = new Random();
  for (int i = 0; i < t.D.Length; i++)
  {
  t.D[i] = rd.NextDouble();
  }
  for (int i = 0; i < t.D.Length; i++)
  {
  Console.WriteLine(t.D[i]);
  }
  Console.ReadLine();
  }
--------------------编程问答-------------------- 记得以前 Basic 中还有 Randomize 可以用,C# 不知道怎么弄啊。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,