生成思路:生成随机数,然后判断与前次生成的随机数是否相同,相同的话就重新生成;
但是执行后每次生成的随机数都相同,什么问题呢?请高手指点,谢谢!int myran = 10;//初始化myran
public static int GenForInt(int minvalue, int maxvalue,ref int myran)  //自动生成int型的随机数据
{
    Random ran;
    int RandKey;
    do
    {
           ran = new Random(unchecked((int)DateTime.Now.Ticks));
           RandKey = ran.Next(minvalue, maxvalue);
    }while (RandKey == myran);
    Console.WriteLine("RandKey:" + RandKey);
    myran = RandKey; //将本次的随机值赋给myran
    return RandKey;
}

解决方案 »

  1.   

    int myran = 10;//初始化myran 
    public static int GenForInt(int minvalue, int maxvalue,ref int myran)  //自动生成int型的随机数据 

        Random ran; 
        ran = new Random(unchecked((int)DateTime.Now.Ticks)); 
        int RandKey; 
        do 
        { 
              RandKey = ran.Next(minvalue, maxvalue); 
        }while (RandKey == myran); 
        Console.WriteLine("RandKey:" + RandKey); 
        myran = RandKey; //将本次的随机值赋给myran 
        return RandKey; 
    }
      

  2.   

    Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
      int[] arrNum=new int[10];
      int tmp=0;
      int minValue=1;
      int maxValue=10;
      for (int i=0;i<10;i++)
      {
        tmp=ra.Next(minValue,maxValue); 
        arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); 
      }
       public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra)
      {
        int n=0;
        while (n<=arrNum.Length-1)
        {
          if (arrNum[n]==tmp) 
          {
            tmp=ra.Next(minValue,maxValue); 
            getNum(arrNum,tmp,minValue,maxValue,ra);
          }
        n++;
        }
        return tmp;
      }
    参考http://www.cnblogs.com/happyhippy/archive/2007/04/03/698384.html
      

  3.   


    private static int myran = 10;//初始化myran //myran要静态的否则每次用都会一样
    public static int GenForInt(int minvalue, int maxvalue,ref int myran)  //自动生成int型的随机数据 

        Random ran; 
        int RandKey; 
        do 
        { 
              ran = new Random(unchecked((int)DateTime.Now.Ticks)); 
              RandKey = ran.Next(minvalue, maxvalue); 
        }while (RandKey == myran); 
        Console.WriteLine("RandKey:" + RandKey); 
        myran = RandKey; //将本次的随机值赋给myran 
        return RandKey; 
    }
      

  4.   


                    int myran = 10;
                    for (int i = 0; i < 10; i++)
                    {                   
                        GenForInt(0, 10, ref myran);
                    }
                    Console.Read();
     
    我这样调用没有问题啊.哪里重复了?
      

  5.   

    int myran = 10;//初始化myran 
    public static int GenForInt(int minvalue, int maxvalue,ref int myran)  //自动生成int型的随机数据 

        Random ran = new Random();
        int RandKey; 
        do 
        { 
             RandKey = ran.Next(minvalue, maxvalue); 
        }while (RandKey == myran); 
        Console.WriteLine("RandKey:" + RandKey); 
        myran = RandKey; //将本次的随机值赋给myran 
        return RandKey; 
    }
    .NET中随机数生成器的默认种子就是DateTime.Now.Ticks,楼主改成上面代码肯定正确
      

  6.   

    ran = new Random(unchecked((int)DateTime.Now.Ticks));
    放到循环体外
      

  7.   

    用GUID.Newguid().GethashCode()生成种子
      

  8.   

    如果要输出的随机数不重复,都把生成好了的,放到一个列表中 
    Random rnd = new Random(); 
    比如说输出1-100不重复的随机数 
    List<int> list=new List<int>();
    for(int i=0;i<100;i++)
    {
       int value=rnd.Next(1, 101);
       while(list.Contains(value))
    {
         value=rnd.Next(1, 101);}
    list.Add(value);}然后输出list
      

  9.   


    楼主你肯定是 在一个循环里调用GenForInt函数吧,呵呵,因为一个循环,如果循环的次数不是非常多的话,他很可能在一百万分之一内执行完成,因此楼主的代码
    new的一个新对象,肯定是用了同一个种子值的,不同随机对象(因为如果是同种子的,同一个对象,但是他每次的Next都会产生不同的Int数值)而你每次都是产生一样的数值,那只有一个可能,那就是你的同一个种子,不同的对象,而产生的相同的数值。所你楼主你的代码是有问题的,
    还有6楼的代码和你的代码,几乎不存在任何区别,他的代码将会产生和你一样的问题,你的代码需要这样改变
    int myran = 10;// 初始化myran 
    Random ran = new Random();// 把随机对象放到函数外public static int GenForInt(Random rand, int minvalue, int maxvalue,ref int myran)  //自动生成int型的随机数据 

        int RandKey; 
        do 
        { 
             RandKey = rand.Next(minvalue, maxvalue); 
        }while (RandKey == myran); 
        Console.WriteLine("RandKey:" + RandKey); 
        myran = RandKey; //将本次的随机值赋给myran 
        return RandKey; 
    }而你调用就这样
    GenForInt(ran, 1, 100, myran);
    这样就可以达到你想到的目的了
      

  10.   

    以Random ran = new Random(System.DateTime.Now.Millisecond);
    微秒来做参照,基本不会重复的
      

  11.   


    for (int i = 0; i < m; i++)
     {
               System.Random a = new Random(System.DateTime.Now.Millisecond + i);
               int RandomNum = a.Next(1, n);
                                                                       
     }