黑马程序员技术交流社区

标题: Random随机数问题 [打印本页]

作者: §風過無痕§    时间: 2013-7-7 22:01
标题: Random随机数问题
本帖最后由 §風過無痕§ 于 2013-7-11 17:57 编辑


怎么在一定范围内生成不重复的随机数?
        是否运用到Random类中的那个方法?

求讲解   求带注释的实例   

作者: baoshouying    时间: 2013-7-7 23:31
List<int> ls = new List<int>();
            Random rd = new Random(unchecked((int)DateTime.Now.Ticks));//创建一个随机对象与指定的种子。
            int num = rd.Next(1, 100);//得到  1-100的整数(但是得不到100)
            bool hasNum = false;//开始时 集合中没有重复的数
            foreach (int i in ls)
            {
                if (i == num)//得到随机数与集合中的重复
                {
                    hasNum = true;
                }
            }
            if (!hasNum)
            {
                ls.Add(num);
            }
            Console.WriteLine(num);
            Console.ReadLine();
作者: ﹏Lifeヽ    时间: 2013-7-8 08:55
本帖最后由 ﹏Lifeヽ 于 2013-7-8 09:02 编辑

用一个字典,利用字典的键的唯一性,这样的随机数不会重复:废话不多说,上代码:

Dictionary<int, int> dir = new Dictionary<int, int>();
            Random r = new Random();
            int min=1;
            int max=9;
            int N = 0;
            while (N < max )
            {
                N++;
                int a = r.Next(min, max);//产生的随机数是大于等于min小于max,//定义变量a接收产生的随机数
                if (dir.ContainsKey(a))//如果包含相同点 键,则跳出去执行下一次循环
                {
                    continue;
                }
                dir.Add(a, a);//如果没有相同的建 则 加入字典dir
            }
            foreach (KeyValuePair<int, int> key in dir)//最后使用KeyValuePair(定义或设置可检索的键值对)用foreach遍历输出字典dir的键//取值用的时候也可用这个方法~
            {
                Console.Write(key.Key+" ");
            }
            Console.ReadKey();

这样产生的随机数 是不会重复的~~

。。。希望能帮助你~

作者: 王震    时间: 2013-7-8 13:19
你可以先定义一个泛型的只存int 类型的集合,把产生的随机数接受后用一个if语句在泛型集合里面用Contains遍历,如果泛型集合里面不存在这个随机数,则把它加入到集合里面,如果包含则不加入集合里面,继续下一次循环。
作者: popoluno    时间: 2013-7-9 14:23
把生成的随机数用一个泛型集合存储,然后下一个生成的随机数存时先遍历此集合,用contains来判断是否有这个新生成的数,思路就是这样




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