C# 调用的一个疑问

来源:百度知道 编辑:UC知道 时间:2024/05/10 13:17:46
我在一个类里面写了一个方法(功能是随机产生1到26之间的一个数字并return)

我在程序里面调用出现一个情况.

会经常连续的随出同一个数字.

为了确认问题是不是出在这.

我在程序里写了一个for语句 循环5000次. 每次都把随机出的结果记录到数据库.

发现数据库里面的记录类似下面这样的情况:
1
1
1
1
1
1
5
5
5
5
5
5
7
7
7
7
7
7
10
10
10 .........

这是怎么回事? 基本是出好几个相同的数字后,才会出另外一个数字.

Ps:如果我直接把随机的语句写在程序里直接用,就不会出现这种情况.

哪位大侠能帮我分析分析?如何解决这种问题(因为项目要求,不能直接写在程序里,只能用类 调用的方式) 在此谢过

计算机产生的随机数是伪随机,需要给一个随机数种子,如果不给,默认种子是当前时间,由于计算机运行速度快,所以在循环体内一大部分随机数都是近似在同一时间内取得,自然取得的数字也就相同了
可以用Thread.Sleep()语句每次取得随机数后停一段时间,让时间变化一下,这样每次取得的数字就会不同,但比较耗时间
如果要在短时间内产生大量随机数可以这样定义
new Random(DateTime.Now.Millisecond).Next(26)
用毫秒来做随机数种子,这样种子变化得就快一些,产生的随机数也相对随机一点(不过也只是相对而已)

你把语句放到程序里用不会出现大部分数字相同的情况,可能就是因为你的程序不会短时间内连续调用产生随机数的方法

.net里已经有类了,为什么还要自己编?
这样不就行了吗?
Random rand=new Random();
for...
{
rand.next(26);
}

如果非要编一个类,请用静态类,并把Random对象设置为类的静态成员。
你的问题在于:random对象在极其短的时间内实例化导致实例所用的种子相同造成的。

Random rand=new Random();
for...
{
rand.next(26);
}
上面写法是正确的
下面写法生成的基本上是相同的数字。你写的方法过程执行完了应该就是下面这个效果
for...
{
Random rand=new Random();
rand.next(26);
}