请问用C#代码如何在点击一个button的同时产生七个不同的随机数呢?
我用以下的函数重复调用七次,但是七个都是一样的随机数。
//生成随机数函数中从strchar 数组中随机抽取
//字母区分大小写
//参数n为生成随机数的位数,一般取四位
protected string RandomNum(int n) //
{
string strchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = strchar.Split(',') ;
string VNum = "" ;//由于字符串很短,就不用StringBuilder了
int temp = -1 ; //记录上次随机数值,尽量避免产生几个一样的随
//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < n+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)
DateTime.Now.Ticks));
}
int t=rand.Next(10);
if (temp != -1 && temp == t)
{
return RandomNum(n);
}
temp = t ;
VNum += VcArray[t];
}
return VNum ;//返回生成的随机数
}
你不用这样写就行!可以一次执行多个嘛!你把这一行改下::
int t=rand.Next(10); ->>>string t=rand.next(10).tostring()+rand.next(10).tostring()+rand.next(10).tostring()+rand.next(10).tostring()+rand.next(10).tostring();
然后引用就行了啊!生成7个就写7个"+rand.next(10).tostring()"
public List<string> RandomNumber(int n)
{
int maxValue =1;
for(int i=1;i<=n;i++)
{
maxValue = maxvalue*10;
}
Random rand =new Random(maxValue);
List<string> numberList = new List<string>();
do
{
int temp = rand.next();
if(!numberlist.contains(temp.toString()))
{
numberlist.add(temp.toString());
}
}while(numberList.Count<7);
return numberList;
}
mark...
简单回答:应当使用一个Random对象计算10个随机数,而不是用10个Random对象
你原来代码有如下问题:
1. 希望通过指定不同的种子来产生不同的伪随机码,但由于你取值范围只是从0 到 9 , 种子对随机数的影响较小。你应该指定一次种子,后面都通过 rand.Next来获取,这样取出来的随机数遵循平均分布。
2. 递归的那一句好像也有问题。好像应该是 return RandomNum(n-i);
下面是我修改过的代码,你可以参考一下
static protected string RandomNum(int n) //
{
string strchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = strchar.Split(',');
string VNum = "";//由于字符串很短,就不用StringBuilder了
int temp = -1; //记录上次随机数值,尽量避免产生几个一样的随
//采用一个简单的算法以保证生成随机数的不同
Random rand = new Random();
for (int i = 1; i < n + 1; i++)
{
int t = rand.Next(10);
while (t == temp)
{
t = rand.Next(10);
}
temp = t;
VNum += VcArray[t];
}
return VNum;//返回生成的随机数
}