Random设定种子变量最好是时间类型的
然后取得

解决方案 »

  1.   

    try
    string y=DateTime.Now.Year.ToString();
    string m=DateTime.Now.Month.ToString();
    string d=DateTime.Now.Day.ToString();
    string h=DateTime.Now.Hour.ToString();
    string n=DateTime.Now.Minute.ToString();
    string s=DateTime.Now.Second.ToString();
    string filename=y+m+d+h+n+s;
    Random r=new Random();
    filename=filename+r.Next(1000);
      

  2.   

    Random设定种子变量为当前时间三
      

  3.   

    我给它加了个Millisecond作为种子变量,应该没有啥子问题了吧?
      

  4.   

    保证没有重复随机数代码:
    '获得随机字符串方法
    Public Shared Function GetRandom() As String
                Dim objRandom As System.Random
                Dim intNumber As Integer
                Dim intDateNum As Long
                Dim strNumber As String
                Dim dat_DateTime As DateTime            strNumber = dat_DateTime.Now.ToString
                strNumber = strNumber.Replace(":", "")
                strNumber = strNumber.Replace("-", "")
                strNumber = strNumber.Replace(" ", "")
                intDateNum = CType(strNumber, Long)            objRandom = New Random(Int((1 + 10 - 1) * CType(Rnd(), Integer)))
                intNumber = objRandom.Next(10000, 99999)
                objRandom = Nothing
                Return (intDateNum + intNumber).ToString()
    End Function
      

  5.   

    不要以为使用系统时间作为随机种子就万无一失了--如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种情况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够“随机”,我们不得不使用复杂一点的方法来获得随机种子。 在下面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够“随机”的随机数。 
    private int[]GetRandomArray(int Length,int Up,int Down)
    { int iFirst=0; 
      int[] rtArray=new Int32[Length]; 
      Random ro=new Random(Length*unchecked((int)DateTime.Now.Ticks)); 
      iFirst=ro.Next(Up,Down); 
      rtArray[0]=iFirst; 
      for(int i=1;i............
      

  6.   

    http://expert.csdn.net/Expert/topic/1662/1662082.xml?temp=.5704157
      

  7.   

    To thetuxedo(Matrix Reloaded) :
    呵呵,我专门加上这个代码:objRandom = New Random(Int((1 + 10 - 1) * CType(Rnd(), Integer)))
    intNumber = objRandom.Next(10000, 99999)
    objRandom = Nothing
    Return (intDateNum + intNumber).ToString()就是防止出现相同种子值的情况的。
      

  8.   

    假设机器速度非常快,在1ms 内可能产生100个随机数,那么普通的random 是肯定重复的!!目的假设有二种可能,可能一:比如抽取考题如果一个都不能重复,那么可以用一个算法,建一个1-100的arraylist
    然后取随机数1-100
    如果取出的数是4 那么和将arraylist 中的4和1 交换,返回4,再产生2-100 的随机数,如果产生的是3 那么就是arraylist 中的3和2 交换,再取3-100 类推,就不会重复,这是一个算法可能二,随机密码,要求重复机率非常低,当然也是指在非常快的情况下,可以使用RNGCryptoServiceProvider 我曾经研究过这个,代码如下:using System;
    using System.Security.Cryptography;namespace ArLi.CommonPrj {
    public sealed class RandomStr { /********
    *  Const and Function
    *  ********/ private static readonly int defaultLength = 8; private static int GetNewSeed(){
    byte[] rndBytes = new byte[4];
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    rng.GetBytes(rndBytes);
    return BitConverter.ToInt32(rndBytes,0);
    } /********
     *  getRndCode of all char .
     *  ********/ private static string BuildRndCodeAll(int strLen) {
    System.Random RandomObj = new System.Random(GetNewSeed()); 
    string buildRndCodeReturn = null;
    for(int i=0; i<strLen; i++) {
    buildRndCodeReturn += (char)RandomObj.Next(33,125);
    }
    return buildRndCodeReturn;
    } public static string GetRndStrOfAll() {
    return BuildRndCodeAll(defaultLength);
    } public static string GetRndStrOfAll(int LenOf) {
    return BuildRndCodeAll(LenOf);
    } /********
     *  getRndCode of only .
     *  ********/

    private static string sCharLow = "abcdefghijklmnopqrstuvwxyz";
    private static string sCharUpp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static string sNumber = "0123456789"; private static string BuildRndCodeOnly(string StrOf,int strLen) {
    System.Random RandomObj = new System.Random(GetNewSeed()); 
    string buildRndCodeReturn = null;
    for(int i=0; i<strLen; i++) {
    buildRndCodeReturn += StrOf.Substring(RandomObj.Next(0,StrOf.Length-1),1);
    }
    return buildRndCodeReturn;
    } public static string GetRndStrOnlyFor() {
    return BuildRndCodeOnly(sCharLow + sNumber,defaultLength);
    } public static string GetRndStrOnlyFor(int LenOf) {
    return BuildRndCodeOnly(sCharLow + sNumber,LenOf);
    } public static string GetRndStrOnlyFor(bool bUseUpper,bool bUseNumber) {
    string strTmp = sCharLow;
    if (bUseUpper) strTmp += sCharUpp;
    if (bUseNumber) strTmp += sNumber; return BuildRndCodeOnly(strTmp,defaultLength);
    }

    public static string GetRndStrOnlyFor(int LenOf,bool bUseUpper,bool bUseNumber) {
    string strTmp = sCharLow;
    if (bUseUpper) strTmp += sCharUpp;
    if (bUseNumber) strTmp += sNumber; return BuildRndCodeOnly(strTmp,LenOf);
    }
    }
    }
      

  9.   

    现在我照  thetuxedo(Matrix Reloaded)的方法,问题基本上解决了,但我不晓得会不会又出现相同的情况!另外为了保险起见,我在产生组随机数的每一个元素的时候加入了一个循环,判断是否产生了相同的数,如果是,我就让它再来一次!!
      

  10.   

    .....
    Random r=new Random(Guid.NewGuid().GetHashCode());
      

  11.   

    ArLi2003(阿利 有好工作叫我) 的方法的确很好,应该不会产生相同的数了,
    看来我真的还要好好学习学习了!