黑马程序员技术交流社区

标题: 随机取出10个1-100之间的数,并且这10个数各不相同 [打印本页]

作者: 淡蓝色    时间: 2013-4-25 17:40
标题: 随机取出10个1-100之间的数,并且这10个数各不相同
class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random();
            int[] arr=new int[10];
            int a;
            for (int i = 0; i < arr.Length; i++)
            {
                do
                {
                    a = r.Next(0, 100);
                    while (a % 2 != 0)
                    {
                        a = r.Next(0, 100);
                    }
                    if (a > 0)
                    {
                        for (int j = 0; j < i; j++)
                        {
                            if (arr[j] == a)
                            {
                                continue;
                            }
                        }
                    }
                    arr[i] = a;
                    break;
                } while (true);
            }
            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }
        }
    }


作者: 许庭洲    时间: 2013-4-25 21:47
值得学习ing!
作者: 秦二江    时间: 2013-4-27 11:06
有重复,有相同
作者: 陈晖    时间: 2013-4-28 21:40
本帖最后由 陈晖 于 2013-4-28 21:41 编辑

你这个代码有重复的结果,有图有真相。

            //实例化一个Random对象,用来产生1-100之间的随机数。
            Random r = new Random();
            //定义一个存放10数字长度的数组。
            int[] arr = new int[10];
            //声明一个临时变量。
            int a;
            for (int i = 0; i < arr.Length; i++)
            {
                do
                {
                    //产生一个0-100之间的随机数,可以取到0,但取不到100,范围好像有问题?
                    a = r.Next(0, 100);
                    //这里是判断产生的数必须是偶数,这个搞不懂为什么要这个while循环?
                    //while (a % 2 != 0)
                    //{
                    //    a = r.Next(0, 100);
                    //}
                    //这里判断产生的数必须是大于0的,其实在上面产生随机数范围时可以改成:
                    //a = r.Next(1, 101);就可以保证从1开始,也能够取到100。
                    //Next()方法是取的到下界值,但取不到上界值。
                    //那样可以将if判断去掉了。
                    //if (a > 0)
                    //{
                    //判断现在取到的值是否与已存在的值有重复?有重复就进行下一次循环。
                    //但是continue是不执行continue所在循环后面的代码,
                    //这里continue所在循环是for循环。就算重复的话,a 也会加到数组中去的。
                    //可以在里面做个处理。
                    for (int j = 0; j < i; j++)
                    {
                        //如果是重复的,就将a赋值为0。并跳出循环。
                        if (arr[j] == a)
                        {
                            a = 0;
                            break;
                        }
                    }
                    //}
                    //如果a的值为0,就继续下一次循环,不将a的值加到数组中去。
                    if (a != 0)
                    {
                        arr = a;
                    }
                    else
                    {
                        continue;
                    }
                    break;
                } while (true);
            }
            //已知数据类型,就将var改为int即可,不便于阅读。
            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }
以上纯属个人想法,请多多指教{:soso_e181:}




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