一个很犯贱的 问题~~~~~~~气死人

来源:百度知道 编辑:UC知道 时间:2024/05/27 05:58:09
定义了 一个去的随机字符串的 函数:如下
public string CreateDutyID()
{
string datetime = String.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now);
Random rnd = new Random();
string suiji = rnd.Next(4, 9999).ToString();
return datetime + suiji;

}
然后声明一个字符串数组,通过循环调用这个函数,这样,理论上数组的每个元素会调用该函数,得到不同的值!
可实际是非常奇怪的。我没有跟踪程序时,数组里每个元素得到的值都是一样的 ,当在循环处设置断点的时候 ,数组里每个元素得到的值,就不同。
请问各位达人,我的程序问题出在哪里,怎样解决这样的问题??
以下是循环调用随机函数,字符串数组取得随机值!:::
string[] tempDuty = new string[GridView1.Rows.Count + 1];
arrSql.Add(SqlString);
for (int i = 0; i < tempDuty.Length; i++)
{
tempDuty[i] = CreateDutyID();
}

有个很简单的改法
为了做测试我修改了一下你的程序,结构没变
private void button1_Click(object sender, System.EventArgs e)
{
string stemp = "";
string[] tempDuty = new string[10];
Random rnd = new Random();
for (int i = 0; i < tempDuty.Length; i++)
{
tempDuty[i] = CreateDutyID(rnd);
stemp+=tempDuty[i]+",";
}
MessageBox.Show(stemp);
}

public string CreateDutyID(Random rand)
{
string datetime = String.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now);
string suiji = rand.Next(4, 9999).ToString();
return datetime + suiji;

}

学习了

C#所提供的随机数,多是以随机种子为依据,产生第一个随机数,而后随机数根据上一个随机数产生。根据你的程序,在很短时间内随机数的种子还没有更新,所以会产生相同的随机数的错觉。。

你只要将此随机数Rendom从循环里拿出来即可。

感兴趣的化,也可以这样,在你的

Random rnd = new Random(); 后加上

Thread.Sleep(15);

也可以噢0.0