for (int j = 0; j < 50; j++)
        {
            int[] pic = RadomNumber(piccount, 3);
            int[] txt = RadomNumber(txtcount, 3);
           if (this.gridview1.Rows[j].Cells[3].Text.ToString() == "图片题")
            {   
                for (int i = 0; i <=2;i++)
                {
                    dt.Rows.Add(dr1[pic[i]].ItemArray);
                    dt.AcceptChanges();
                   
                }
            }
            if (this.gridview1.Rows[j].Cells[3].Text.ToString() == "文字题")
            {
                
                for (int i = 0; i <= 2; i++)
                {
                    dt.Rows.Add(dr2[txt[i]].ItemArray);
                    dt.AcceptChanges();
                }
            }
            
          
        }
        this.GridView2.DataSource = dt;
        this.GridView2.DataBind();
RadomNumber(int maxlength,int wantlength)是我编写生成随机不重复数组的函数。这段代码运行后gridview2里面的数据都是重复的?why?

解决方案 »

  1.   

    why?你问谁呢?只有你自己知道,自己调试去,看看RadomNumber返回的什么东西。
      

  2.   

     RadomNumber(piccount, 3);这里的代码都没有,你问谁那, 接楼上的回答。
      

  3.   

    随机函数需要有一定的时间间隔。
    你Sleep(10)后结果就不一样了
      

  4.   

    随机函数Random默认用系统时间作为种子,在循环中由于时间太短,执行速度太快的原因,random由种子而产生的随机数就很大可能是相同的,若在循环中加入一个语句暂缓循环,所得到的结果接不一样了。
      

  5.   

    Random rand = new Random(Guid.NewGuid().GetHashCode());  
    list.Add(rand .Next(最小值,最大值));
      

  6.   

    #region 生成随机不重复数组
        protected int[] RadomNumber(int maxlength, int wantlength)
        {        int[] index = new int[maxlength];  //0-i的连续数组
            int[] result = new int[wantlength];  //结果输出的数组
            int size = maxlength;                   //连续数组的索引
            Random rad = new Random();     //随机变量
            for (int j = 0; j < maxlength; j++)
            {
                index[j] = j;  //给连续数组赋值
            }
            for (int k = 0; k < wantlength; k++)
            {
                int x = rad.Next(0, size);  //x=0-i之间的随机数
                result[k] = index[x];  //把第x个数字赋值给输出数组的第k个
                index[x] = index[size - 1]; //把最后一个数字覆盖掉第x个数字
                size--; //size减一        }
            return result;    }
        #endregion