猿问

请问各位慕友们,我的程序问题出在哪里,怎样解决这样的问题??

定义了 一个去的随机字符串的 函数:如下
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();
}

尚方宝剑之说
浏览 190回答 2
2回答

Qyouu

C#所提供的随机数,多是以随机种子为依据,产生第一个随机数,而后随机数根据上一个随机数产生。根据你的程序,在很短时间内随机数的种子还没有更新,所以会产生相同的随机数的错觉。你只要将此随机数Rendom从循环里拿出来即可。感兴趣的话,也可以这样,在你的Random rnd = new Random(); 后加上Thread.Sleep(15);也可以噢0.0&nbsp;

泛舟湖上清波郎朗

有个很简单的改法为了做测试我修改了一下你的程序,结构没变private void button1_Click(object sender, System.EventArgs e){string stemp = "";string[] tempDuty = new string[10];&nbsp;Random rnd = new Random();&nbsp;for (int i = 0; i < tempDuty.Length; i++)&nbsp;{&nbsp;tempDuty[i] = CreateDutyID(rnd);stemp+=tempDuty[i]+",";}MessageBox.Show(stemp);}public string CreateDutyID(Random rand)&nbsp;{&nbsp;string datetime = String.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now);&nbsp;string suiji = rand.Next(4, 9999).ToString();&nbsp;return datetime + suiji;&nbsp;}
随时随地看视频慕课网APP
我要回答