为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
尚方宝剑之说 2023-04-08 18:14:50
定义了 一个去的随机字符串的 函数:如下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();}
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

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

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

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

Random rnd = new Random(); 后加上

Thread.Sleep(15);

也可以噢0.0

 


查看完整回答
反对 回复 2023-04-11
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

有个很简单的改法
为了做测试我修改了一下你的程序,结构没变
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; 

}


查看完整回答
反对 回复 2023-04-11
  • 2 回答
  • 0 关注
  • 188 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信