本帖最后由 李维强-15级 于 2018-7-6 16:21 编辑
如果用random类,来产生少量的随机数 也是可取的,而且必须是在非连续的时间段,意思就是不能用在for循环等连续产生随机数的地方。
下面这个示例 就是错误的示例
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
int value1 = 0;
Random rd1 = new Random();
for (int i = 0; i < 1000; i++)
{
value1 = value1 + rd1.Next(-10, 10);
}
这样,最后value1的值总是负数,而且循环次数越多,负得越大。
针对这种情况,微软专门给了个产生真随机数的函数
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode public int GetRandomSeed()
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}
这个函数就是产生真随机数的,结果是有正有负,好像是9位数的随机数,那么如果需要转换为-100到100之间的输,那么直接GetRandomSeed() % 100 即可 |