Random Number Generation - Same Number returned
Possible Duplicates:
c# - getting the same random number repeatedly
Random number generator not working the way I had planned (C#)
我有一个方法可以构建一个整数队列:
1 2 3 4 5 6 7 8 9 10 11 | public Queue<int> generateTrainingInts(int count = 60) { Queue<int> retval = new Queue<int>(); for (int i = 0; i < count; i++) { retval.Enqueue(JE_Rand.rInt(2001, 100)); } return retval; } |
je ound.rint()只是一个委托给随机类函数的函数:
1 2 3 4 5 6 7 | public static int rInt(int exclUB, int incLB = 0) { Random rand = new Random(DateTime.Now.Millisecond); int t = rand.Next(incLB, exclUB); rand = null; return t; } |
但是当我调用generateTrainits时,每次都会有相同的数字排队。但是,如果我将rint更改为使用随机类的静态实例,而不是本地实例(上面定义了函数作用域),那么它看起来工作正常(将随机整数排队)。有人知道为什么会这样吗?
编辑:亲爱的回答者们,他们没有仔细阅读我的问题,正如你们中的一些人所指出的,我正在寻找一个很好的解释为什么会发生这种情况。我不是在寻找一个解决相同数字产生的问题的方法,因为我已经像上面所说的那样解决了这个问题。不过,感谢您的热情:)我真的只是想理解这样的事情,因为我的第一个实现在概念上对我来说更合理。
你需要保持同一个
1 2 3 4 5 6 7 | private static Random rand = new Random(); public static int rInt(int exclUB, int incLB = 0) { int t = rand.Next(incLB, exclUB); return t; } |
编辑原因是用于初始化
尝试以下代码,我想您会明白原因:
1 2 3 4 5 6 7 | void PrintNowAHundredTimes() { for (int i = 0; i < 100; ++i) { Console.WriteLine(DateTime.Now); } } |
正如我猜想的那样,两个初始化为相同种子值的
您还应该知道,即使在方法中本地实例化一个新的
1 2 3 4 5 6 7 8 9 10 | public class JE_Rand { private static Random rand= new Random(DateTime.Now.Millisecond); public static int rInt(int exclUB, int incLB = 0) { int t = rand.Next(incLB, exclUB); return t; } } |