double r1, r2;
            double [] w1=new double [6];
            int i;
            Random Rnd = new Random();
            r2 = 2 * Rnd.NextDouble() - 1;
            for (i = 0; i <= 5; i++)
            {
                Rnd = new Random();
                r1 = 2 * Rnd.NextDouble() - 1;//产生[-1,1]之间的数
                while (r1 == r2)
                {
                    Rnd = new Random();
                    r1 = 2 * Rnd.NextDouble() - 1;
                }
                w1[i] = r1;
                Console.WriteLine(w1[i]);
            }
            Console.ReadLine();
这段代码的执行结果怎么都一样呀?结果应该是不一样的!并且单步执行的结果和非单步执行的结果一点都不一样!

解决方案 »

  1.   

                double r1, r2;
                double [] w1=new double [6];
                int i;
                Random Rnd = new Random();
                r2 = 2 * Rnd.NextDouble() - 1;
                for (i = 0; i <= 5; i++)
                {
                    // Rnd = new Random();  // <---   这句去掉
                    r1 = 2 * Rnd.NextDouble() - 1;//产生[-1,1]之间的数
                    while (r1 == r2)
                    {
                        // Rnd = new Random();  // <---   这句也去掉
                        r1 = 2 * Rnd.NextDouble() - 1;
                    }
                    w1[i] = r1;
                    Console.WriteLine(w1[i]);
                }
                Console.ReadLine(); 
      

  2.   

    因为 Random Rnd = new Random(); 会以电脑时钟初始化随机数种子,而运行太快,时钟没什么变化,所以每次都相同,调试时单步执行,时间不同,所以随机数种子也不同。