日期:2014-05-17  浏览次数:20929 次

关于生成不重复随机数报错的问题
我想生成20个随机数,随机数生成的值范围在1~34之间,问题是经常性的在执行过程中就报错:
未处理 System.StackOverflowException
“System.StackOverflowException”类型的未经处理的异常出现在 System.Windows.Forms.dll 中。
疑难解答提示:确保您没有无限循环或无限递归
根据我的理解应该是在生成的随机数需判断该数字是否已经存在,如果已经存在就递归调用重新生成这里出现问题的,不知道有没有理解错误,请问这个是我的递归哪里没有写好吗,有没有更好的解决方法?

具体代码如下:

private void btnCreateNumber_Click(object sender, EventArgs e)
        {
            int[] sorttemp = new int[20];
            for (int i = 0; i < 20; i++)
            {
                sorttemp[i] = CheckNumberRepeat(sorttemp);
            }
        }

private int CheckNumberRepeat(int[] iImport)
        {
            Random NumRandom = new Random();
            int iTempRedNum = NumRandom.Next(1, 34);
            for (int i = 0; i < iImport.Length; i++)
            {
                if (iImport[i] == iTempRedNum)
                {
                    CheckNumberRepeat(iImport);
                }
            }
            return iTempRedNum;
        }

------解决方案--------------------