【发布时间】:2018-02-16 12:19:44
【问题描述】:
正在考虑创建一个支持uint, long & ulong 的随机数生成器。我开始制作随机的uint 生成器,但一直在制作最小、最大生成器。
这就是我所拥有的
public class Rand : System.Random
public uint UInt32(uint min, uint max)
{
byte[] array = new byte[4];
base.NextBytes(array);
uint result = BitConverter.ToUInt32(array, 0);
if (result < min | result > max)
{
UInt32(min, max); //here i get a StackOverflowException
}
return result;
}
为什么我在尝试使用相同参数运行相同方法时得到StackOverflowException?
【问题讨论】:
-
你有没有试过调试它来一步一步地观察它实际上在做什么,观察变量?您可以回答自己的问题。
-
基本上你永远不会从递归函数返回。
-
可能你只是陷入了递归函数循环
-
if (result max) 这是正确的还是应该是 ||?
-
您生成随机数,如果它不符合标准(最小-最大范围) - 您再次调用相同的函数。但是随机数可能无法匹配这个标准任意次数,而堆栈大小不是无限的,所以经常(多久取决于最小值和最大值)你的递归调用会吃掉所有的堆栈。这不是你应该在一个范围内生成随机数的方式。
标签: c#