做了个抽奖程序,
我是这样随机获取 1 到 10000 范围随机数的,rd = new Random();            
int d=rd.Next(1,10000);但是运行的时候出错了,
System.StackOverflowException大家帮我解决一下,谢谢

解决方案 »

  1.   

    你循环的有问题吧?还是计算机内存太小?
    Random rd = new Random();
    int d;
    for (int i = 0; i < 1000; i++)
    {
      d = rd.Next(1, 10000);
      Response.Write("<li>" + d);
    }
      

  2.   


    内存有 4G
     我每次循环都 new Random();
      

  3.   

    发生类型为 System.StackOverflowException 的异常。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.StackOverflowException: 发生类型为 System.StackOverflowException 的异常。
      

  4.   

    Random rd = new Random();
            int x = rd.Next(1, 10000);
    我咋就没错误呢、
      

  5.   

    每次循环都 new Random();是不是因为你这个每次都New搞出来的问题啊?
      

  6.   

    System.StackOverflowException栈溢出,临时变量太多了
      

  7.   

    rd = new Random();   
    int d=rd.Next(1,10000);
    不是全部代码吧?能不能贴全一些
      

  8.   

    Random 和堆栈溢出没关系,看看是不是有递归函数没写明白。另外不要每次都 new 一个 Random,很容易出现相同的值
      

  9.   

    错误不就是堆栈溢出吗
    改成Using(random rd = new random() )
    {
    int x = rc.next(1,10000);
    }
    试试看
      

  10.   

    每次都new Random()不会导致栈溢出,你把代码贴全看看,看看是不是用了递归。
      

  11.   

    using 不了啊 那代表random无需释放啊 那个还有一个占用堆栈内存的就是那个
    int d=rd.Next(1,10000);
    把int d单提出来 别没次循环都定义它
      

  12.   

    public int rand()
            {
                int d;
                Random rd;
                rd = new Random();
                d=rd.Next(1,rencount + 1);
                
                if (dhas(d))
                {
                    d = rand();
                }
                return d;
            }dhas(d) 这个方法是判断生成出来的随机数是不是生成过了
      

  13.   

    d = rand();
    修改为
    d=rd.Next(1,rencount + 1);
      

  14.   

    对不起,应该修改为
    while (dhas(d))
    {
       d=rd.Next(1,rencount + 1);
    }
      

  15.   

     /// <summary>
            /// 随机1-100不重复的数
            /// </summary>
            public static void RndHundred()
            {
                int[] iarr = new int[100];
                ArrayList arrlist = new ArrayList();
                Random rnd = new Random();
                while (arrlist.Count <= 100)
                {
                    int num = rnd.Next(1, 101);
                    if (!arrlist.Contains(num))
                    {
                        arrlist.Add(num + " ");
                    }
                }
                for (int i = 0; i < 100; i++)
                {
                    Console.Write(arrlist[i]);
                }
            }
      

  16.   

    可能 new Random() 太多了
    我把rand() 改 为 rand(rd) 把生成的Random 对象传进出
    结果速度快了许多,也没出错。
    也不知道问题是不是解决了。
      

  17.   

    你这个程序导致栈溢出的原因是递归,但程序根本性的问题不是递归是算法。推荐一篇文章:
    http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html
    不重复随机数列生成算法。
      

  18.   

    Enumerable.Range(1, 100).OrderBy(Guid.NewGuid());   
      

  19.   

    如果你测试觉得var result = Enumerable.Range(1, 10000).OrderBy(c=>Guid.NewGuid()).ToList();
    太慢了,当然可以使用Random的写法:var rnd = new Random();
    var result = Enumerable.Range(1, 10000).OrderBy(c => rnd.Next()).ToList();
      

  20.   

    2楼的办法是正确的,不会有问题的。
    楼主为什么连rd=new random也要交在循环中呢,你的循环什么条件结束?