网上找了一个,执行时老提示:堆栈溢出!代码如下: /// <summary>
/// 随机区取区段内的一级随机数
/// </summary>
/// <param name="num"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] GetRandomNum(int num,int minValue,int maxValue){
Random ra=new Random(unchecked((int)DateTime.Now.Ticks)); int[] arrNum=new int[num]; int tmp=0; for (int i=0;i<=num-1;i++){ tmp=ra.Next(minValue,maxValue); arrNum[i]=GetNum(arrNum,tmp,minValue,maxValue,ra);
} return arrNum;
} /// <summary>
/// 配合上一个函数使用
/// </summary>
/// <param name="arrNum"></param>
/// <param name="tmp"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="ra"></param>
/// <returns></returns>
public static 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; }

解决方案 »

  1.   

    出错在:GetNum(arrNum,tmp,minValue,maxValue,ra);这一行
      

  2.   

    参见:http://community.csdn.net/Expert/topic/5308/5308418.xml?temp=.2898676
      

  3.   

    看到if和while就不想看下去,这种算法太弱
    public static int[] RandomNumbers(int num, int minValue, int maxValue)
    {
        if (num <= 0) return null;
        if (maxValue < minValue)
            minValue = maxValue | (maxValue = minValue) & 0;
        if (num > maxValue - minValue + 1) return null; // 取的个数多余范围就算了
        List<int> vValues = new List<int>();
        for(int i = minValue; i <= maxValue; i++)
            vValues.Add(i);
        int[] Result = new int[num];
        Random vRandom = new Random();
        for (int i = 0; i < num; i++)
        {
            int j = vRandom.Next(vValues.Count);
            Result[i] = vValues[j];
            vValues.RemoveAt(j);
        }
        return Result;
    }
      

  4.   

    提示:
    由于随机种子和当前时间有关系,如果你获取的数组操作很频繁
    就容易出现重复的情况,这个时候可以把随机变量放到外面,初始化一次即可
    private static  Random vRandom = new Random();
      

  5.   

    我的 .NET 框架是 1.1 的,zswang 的代码改成了如下: /// <summary>
    /// 在一个整数区间内产生一组不重复的随机数
    /// </summary>
    /// <param name="num">产生的随机数个数</param>
    /// <param name="minValue"></param>
    /// <param name="maxValue"></param>
    /// <returns></returns>
    public static int[] RandomNumbers(int num, int minValue, int maxValue) { if (num <= 0) return null;
    if (maxValue < minValue)
    minValue = maxValue | (maxValue = minValue) & 0;
    if (num > maxValue - minValue + 1) return null; // 取的个数多余范围就算了 ArrayList vValues = new ArrayList();
    for(int i = minValue; i <= maxValue; i++){
    vValues.Add(i);
    } int[] Result = new int[num];
    Random vRandom = new Random(); for (int i = 0; i < num; i++) {
    int j = vRandom.Next(vValues.Count);
    Result[i] = Int32.Parse(vValues[j].ToString());
    vValues.RemoveAt(j);
    } return Result;
    }
      

  6.   

    将List<>换成了ArrayList了??用List<>效率当然要高一些,ArrayList还要涉及到装箱拆箱的操作...
      

  7.   

    我也知道啊,在visual .net 2003里编译不通过。改成 int[] 的话,效率和List<>比起来哪个好?