首页 新闻 会员 周边

随机数的问题

0
悬赏园豆:30 [已关闭问题]

请问用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 ;//返回生成的随机数 

        }

dishen的主页 dishen | 初学一级 | 园豆:55
提问于:2009-03-19 10:50
< >
分享
其他回答(5)
0

你不用这样写就行!可以一次执行多个嘛!你把这一行改下::

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()"

子夜星辰 | 园豆:1613 (小虾三级) | 2009-03-19 12:03
0

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;

}

Paabo | 园豆:157 (初学一级) | 2009-03-19 14:55
0

mark...

Jared.Nie | 园豆:1940 (小虾三级) | 2009-03-19 17:32
0

简单回答:应当使用一个Random对象计算10个随机数,而不是用10个Random对象

Gray Zhang | 园豆:17610 (专家六级) | 2009-03-19 18:53
0

你原来代码有如下问题:

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;//返回生成的随机数

        }

eaglet | 园豆:17139 (专家六级) | 2009-03-19 19:07
0
生鱼片 | 园豆:5757 (大侠五级) | 2009-03-19 19:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册