protected void Page_Load(object sender, EventArgs e)
    {
        rand("am");
        rand("pm");
        rand("am");
        rand("pm");
    }
    protected void rand(string ap)
    {
        int i=0;
        if (ap == "am")
        {
            Random rd = new Random();
            i = rd.Next(1, 29);
            Response.Write(i.ToString()+"<br>");
        }
        else
        {
            Random rd = new Random();
            i = rd.Next(30, 59);
            Response.Write(i.ToString()+"<br>");
        }
    }输出结果竟然是:
22
52
22
52
两次获取竟然是同一个结果,是我哪里忽略了么?

解决方案 »

  1.   

    自己解决,把Random作为全局变量既可!
      

  2.   

    Random本来就是伪随机的,短时间内new的多个Random实例如果不指定种子,生成出来的随机数都是一样的
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
     Random rd = new Random();
            rand("am",rd );
            rand("pm",rd );
            rand("am",rd );
            rand("pm",rd );
        }
        protected void rand(string ap, Random rd)
            {
                int i = 0;
                if (ap == "am")
                {
                    i = rd.Next(1, 29);
                    Console.WriteLine(i.ToString());
                }
                else
                {
                    i = rd.Next(30, 59);
                    Console.WriteLine(i.ToString());
                }
            }
        }
      

  4.   

    上面的代码你自己改一下  刚刚用h控制台帮你测试的,忘记改了。
    出现这个原因是因为在创建Random时,随机数创建用到的时间片段太短,不能产生不同的实例;
      

  5.   

    老生常谈的问题了。
    Random的随机种子问题。一般都是放在循环或者方法外。