不遗漏的随机数字

不遗漏的随机数字

问题的引入:
 产生1-10之间不重复,不遗漏的随机数字
  今天看csdn,看到这样一个题目,很简单的题目,解决方法也很简单,于是随手写了random10NumB()(如下)再看看那篇帖子下面,还有一个高人的程序(random10NumA())。
  看看random10NumA(),它采用List来作为容器,利用每次取出数后减少容器大小实现每次取出的数都是非重复的。
  看来,看待问题也要随时保持从不同的角度。
 public void random10NumA() {
  List src = new ArrayList();
  for (int i = 1; i <= 10; src.add(String.valueOf(i++)))
   ;
  Random rand = new Random();
  while (!src.isEmpty()) {
   int index = rand.nextInt(src.size());
   System.out.println(src.remove(index));
  }
 }
 public void random10NumB() {
  Random ran = new Random();
  int[] ranArray = new int[10];
  for (int i = 0; i < 10; i++) {
   int curNum = ran.nextInt(10) + 1;
   for (int j = 0; j < i; j++) {
    if (curNum == ranArray[j]) {
     curNum = ran.nextInt(10) + 1;
     j = 0;
    }
   }
   ranArray[i] = curNum;
  }
  for (int i = 0; i < 10; i++) {
   System.out.println("ranArray[" + i + "]=" + ranArray[i]);
  }
 }
output:
random10NumA():
3
9
8
1
5
6
2
4
10
7
random10NumB():
ranArray[0]=3
ranArray[1]=2
ranArray[2]=5
ranArray[3]=3
ranArray[4]=4
ranArray[5]=9
ranArray[6]=8
ranArray[7]=1
ranArray[8]=6
ranArray[9]=7

Leave a Reply

Your email address will not be published. Required fields are marked *