日期:2014-05-18  浏览次数:20770 次

怎么看不到别人回的帖子,只好再开一贴:还是生成不重复随机数和固定数组乱序的问题
1、固定数组乱序排列:
设数组包括1-999的所有整数,怎样将该数组乱序排列

2、生成指定数量的4位随机数,该数量少于9000(9999-1000+1)

private List<int> genRandomCode(int num)
  {
  Random ran = new Random();//实例一个随机器
  List<int> list = new List<int>(num);//定义一个指定容量的链表
  int i = 1;
  while (i <= num)
  {
  int temp = ran.Next(1000, 10000)
  if (!list.Contains(temp))//如果链表中不存在这个数
  {
  list.Add(temp);//链表中添加该数
  i++;
  }
  }
  return list;
  }

这个方法总觉得不太可靠,
一是list是不是比较占内存,用数组或字典能不能好点
二是当要求生成的数量比较大时,random.next如果总是找到重复的值,该方法的结束时间是不是变得不可预测


------解决方案--------------------
C# code
public List<int> GenerateNumber()
{
        Random  random = new Random();
        List<int> number = new List<int>(9000);
        List<int> result = new List<int>(9000);
        for (int i = 0; i < 10; i )
        {
                number.Add(i);
        }
        for (int i = 0; i < 4; i )
        {
                int tempNum = random.Next(0, number.Count);
                result.Add(number[tempNum]);
                number.RemoveAt(tempNum);
        }
        return result;
}