C#生成随机数报错:确保您没有无限循环或无限递归

时间:2021-06-27 12:39:53
求问这个随机数生的方法不时的会报错:确保您没有无限循环或无限递归,但看不懂,请问应当如何更改?
 private string CreateRandomNum(int NumCount)
    {
        string allChar = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        //TODO
        char[] allCharArray = allChar.ToCharArray();
        string randomNum = "";
        int temp = -1;
        Random rand = new Random();
        for (int i = 0; i < NumCount; i++)
        {
            if (temp < -1)
            {
                int k = (int)(DateTime.Now.Ticks);
                rand = new Random(i * temp * (k));
            }
            int t = rand.Next(35);
            if (temp == t)
            {
                return CreateRandomNum(NumCount);
            }
            temp = t;
            randomNum += allCharArray[t];
        }
        return randomNum;
    }

5 个解决方案

#1


Process is terminated due to *Exception.
进程由于堆栈溢出异常而终止。

将 Random rand = new Random(); 移到 CreateRandomNum 方法之外即可

其实即便不出现异常,你那分段连续相同的结果也是应该进行修改算法的

#2


什么情况下报错,报什么错?

#3


引用 1 楼 xuzuning 的回复:
Process is terminated due to *Exception.
进程由于堆栈溢出异常而终止。

将 Random rand = new Random(); 移到 CreateRandomNum 方法之外即可

其实即便不出现异常,你那分段连续相同的结果也是应该进行修改算法的

不是很懂,不过移到外面之后确实好了,谢谢!

#4


引用 2 楼 yuankaiwsl 的回复:
什么情况下报错,报什么错?

这其实是一个生成验证码的asp页面,在生成验证码时有时会报错

#5


不理解?
        static void Main(string[] args)
        {
            for(int i=0; i<100; i++) //测试 100 遍
                Console.WriteLine(CreateRandomNum(10));
        }
        static Random rand = new Random();
        private static string CreateRandomNum(int NumCount)
        {
            string allChar = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            //TODO
            char[] allCharArray = allChar.ToCharArray();
            string randomNum = "";
            int temp = -1;
            Random rand = new Random(); //如果放在里面
            for (int i = 0; i < NumCount; i++)
            {
                if (temp < -1)
                {
                    int k = (int)(DateTime.Now.Ticks);
                    rand = new Random(i * temp * (k));
                }
                int t = rand.Next(35);
                if (temp == t)
                {
                    return CreateRandomNum(NumCount);
                }
                temp = t;
                randomNum += allCharArray[t];
            }
            return randomNum;
        }
C#生成随机数报错:确保您没有无限循环或无限递归可以看到都是重复的!

#1


Process is terminated due to *Exception.
进程由于堆栈溢出异常而终止。

将 Random rand = new Random(); 移到 CreateRandomNum 方法之外即可

其实即便不出现异常,你那分段连续相同的结果也是应该进行修改算法的

#2


什么情况下报错,报什么错?

#3


引用 1 楼 xuzuning 的回复:
Process is terminated due to *Exception.
进程由于堆栈溢出异常而终止。

将 Random rand = new Random(); 移到 CreateRandomNum 方法之外即可

其实即便不出现异常,你那分段连续相同的结果也是应该进行修改算法的

不是很懂,不过移到外面之后确实好了,谢谢!

#4


引用 2 楼 yuankaiwsl 的回复:
什么情况下报错,报什么错?

这其实是一个生成验证码的asp页面,在生成验证码时有时会报错

#5


不理解?
        static void Main(string[] args)
        {
            for(int i=0; i<100; i++) //测试 100 遍
                Console.WriteLine(CreateRandomNum(10));
        }
        static Random rand = new Random();
        private static string CreateRandomNum(int NumCount)
        {
            string allChar = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            //TODO
            char[] allCharArray = allChar.ToCharArray();
            string randomNum = "";
            int temp = -1;
            Random rand = new Random(); //如果放在里面
            for (int i = 0; i < NumCount; i++)
            {
                if (temp < -1)
                {
                    int k = (int)(DateTime.Now.Ticks);
                    rand = new Random(i * temp * (k));
                }
                int t = rand.Next(35);
                if (temp == t)
                {
                    return CreateRandomNum(NumCount);
                }
                temp = t;
                randomNum += allCharArray[t];
            }
            return randomNum;
        }
C#生成随机数报错:确保您没有无限循环或无限递归可以看到都是重复的!