A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝滨 中级黑马   /  2013-2-18 11:15  /  1758 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

           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语句放在循环里面也可以运行,只不过循环次数要多好多倍。为何?

4 个回复

倒序浏览
楼主你好,我用你的代码稍微改了下后运行后发现一个有趣的事情.你可以运行这个代码:

            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一个)放在循环内,它在一段时间内得到的数字与上一次是一样的.

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

坐等高手解答



回复 使用道具 举报
pokemon 发表于 2013-2-18 14:21
楼主你好,我用你的代码稍微改了下后运行后发现一个有趣的事情.你可以运行这个代码:

            ArrayList ...

这个会不会是垃圾回收器的回收间隔造成的?
回复 使用道具 举报
谢谢楼主分享
回复 使用道具 举报
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);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马