本帖最后由 cs2021 于 2012-01-03 16:14:00 编辑

解决方案 »

  1.   

    ckMdIndex完全不对,不能保证tmp不重复,给你一个简单可靠的实现:  private void main()
       {
       int[2]=getMdIndex(1,4);
       }   private int[] getMdIndex(int minValue, int maxValue)
       {
       int xsrs=2;
       Random ran = new Random(unchecked((int)DateTime.Now.Ticks));
       int[] mdIndex = new int[xsrs];
       int tmp = 0;
       for (int i = 0; i < xsrs; i++)
       {
       tmp = ran.Next(minValue, maxValue);
       while(!ckMdIndex(mdIndex, tmp, minValue, maxValue))
    {
       tmp = ran.Next(minValue, maxValue);
    }
       mdIndex[i] = tmp;  
      if (i > 0 && mdIndex[0] == mdIndex[1])  
      {
       MessageBox.Show("位置1与位置2数值相同");
       }
       }
       return mdIndex;
       }   private bool ckMdIndex(int[] mdIndex, int tmp, int minValue, int maxValue)  
      {
       int n = 0;
       while (n < mdIndex.Length)
       {
       if (mdIndex[n] == tmp)
       {
          return false;
      }
       n++;
       }
       return true;
       }不过有可能陷入死循环,请慎用,
      

  2.   

            public static void RandomNum(IList<int> ilist, Random rm)
            {
                while (true)
                {
                    int n = rm.Next(1, 5);
                    if (!ilist.Contains(n))
                    {
                        ilist.Add(n);
                        break;
                    }
                }
            }