我现在在做一个教程。需要实现生成20个各不相同的数字存入数组中。我使用一个递归函数实现判断生成的随机数是否相同。可是结果却常常有2个是相同的,其他的都是不同的。代码如下:请大家指教,谢谢!!
   int[] a = new int[20];
   Random s = new Random();            for (int i = 0; i < 20; i++)
            {                int r = s.Next(1, 30);
                if (i == 0)
                { a[i] = r; }
                else
                {
                    a[i] = Get(a, r, i, s);//递归函数                }
private int Get(int[] a, int random, int i, Random s)
        {            for (int j = 0; j < i; j++)
            {
                if (random == a[j])
                {
                    random = s.Next(1, 30);
                    Get(a, random, i, s);                }            }
            return random;        }

解决方案 »

  1.   

    我的建议是,定义一个int[] a = new int[30],付值0-29
    你第一次取随机数的时候就从这里面取,取完一个后,把这个值和最后一位的互换位置
    这样下次取就是从Index:0-28里面取,以此类推....这样肯定不会出现重复
      

  2.   

    谢谢上面提供的方法,不过这个教程要求用random来实现随机生成数字!
      

  3.   


    private int   m_int  = 0;
    private ArrayList m_list = new ArrayList();
    private void Get()
    {
    Random s = new Random();
    while(m_list.Count != 20)
    {
    m_int    = s.Next(1, 30);
    if(m_list.Contains(m_int))
    {
    continue;
    }
    else
    {
    m_list.Add(m_int);
    }
    }
    }这样可以解决
      

  4.   

    ArrayList是什么啊?我试了下,系统说找不到类型或者命名空间也。
      

  5.   

    补充:教程里面需要在listbox里面显示输出的随机数字。
      

  6.   

    using System.Collections;
    这是ArrayList的命名空间
    也是个数组
    foreach(int i in m_list)
    {
        listBox1.Items.Add(i.ToString());
    }
    这样就可以了
      

  7.   

    如用一般的数组也可以这样
    private void Get()
    {
             Random s = new Random();
    for(int i = 0; i < 20; i++)
    {
    bool m_b = false;
    m_int = s.Next(1, 30);
    for(int j = 0; j < m_list.Length; j ++)
    {
    if(m_int == m_list[j])
    {
    m_b = true;
    i --;
    break;
    }
    }
    if(m_b == false)
    {
    m_list[i] = m_int;
    }
    }
    }
    然后
    foreach(int i in m_list)
    {
        listBox1.Items.Add(i.ToString());
    }
    不过我这个方法比较笨
      

  8.   

    我的MSN是[email protected]