黑马程序员技术交流社区

标题: 随机取数循环次数问题 [打印本页]

作者: 郝滨    时间: 2013-2-18 11:15
标题: 随机取数循环次数问题
           ArrayList arrradom = new ArrayList();
            Random random = new Random();
            int index = 0;
            while (arrradom.Count < 10)
            {
                index++;
                int rd = random.Next(1, 101);
                if (rd % 2 == 0)
                {
                    if (!arrradom.Contains(rd))
                    {
                        arrradom.Add(rd);
                    }
                }
            }
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(arrradom[i]);
            }

            Console.WriteLine("循环了{0}次",index);
            Console.ReadKey();
将random语句放在循环里面也可以运行,只不过循环次数要多好多倍。为何?
作者: 戴鑫凯    时间: 2013-2-18 14:21
楼主你好,我用你的代码稍微改了下后运行后发现一个有趣的事情.你可以运行这个代码:

            ArrayList arrradom = new ArrayList();
            //Random random = new Random();
            int index = 0;
            while (arrradom.Count < 10)
            {
                Random random = new Random();
                index++;
                int rd = random.Next(1, 101);
                Console.WriteLine(rd);
               // if (rd % 2 == 0)
              //  {
                    //if (!arrradom.Contains(rd))
                    //{
                        arrradom.Add(rd);
                   // }
               // }
            }
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(arrradom[i]);
            }

            Console.WriteLine("循环了{0}次", index);
            Console.ReadKey();

然后再试试循环1000次  10000次  

我发现如果把random语句(new一个)放在循环内,它在一段时间内得到的数字与上一次是一样的.

感觉有点字符串驻留池的意思..

坐等高手解答




作者: 戴鑫凯    时间: 2013-2-18 14:22
pokemon 发表于 2013-2-18 14:21
楼主你好,我用你的代码稍微改了下后运行后发现一个有趣的事情.你可以运行这个代码:

            ArrayList ...

这个会不会是垃圾回收器的回收间隔造成的?
作者: 3Y25    时间: 2013-2-18 15:23
谢谢楼主分享
作者: 王立    时间: 2013-2-18 15:31
Random random=new Random();
如果不写种子,就取当前时间为种子
只要种子一样,每次产生的随机数都是一样的
因为循环很快,时间相同,种子一样
不要把Random写到循环里面
1不写到循环里面
Random r = new Random();
string s = "";
for (int i = 0; i < 1000; i++)
{
     s += r.Next(1, 100)+",";
}
MessageBox.Show(s);
2写到循环里面
string s = "";
for (int i = 0; i < 1000; i++)
{
     Random r = new Random();
     s += r.Next(1, 100)+",";
}
MessageBox.Show(s);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2