不遗漏的随机数字
问题的引入:
产生1-10之间不重复,不遗漏的随机数字
产生1-10之间不重复,不遗漏的随机数字
今天看csdn,看到这样一个题目,很简单的题目,解决方法也很简单,于是随手写了random10NumB()(如下)再看看那篇帖子下面,还有一个高人的程序(random10NumA())。
看看random10NumA(),它采用List来作为容器,利用每次取出数后减少容器大小实现每次取出的数都是非重复的。
看来,看待问题也要随时保持从不同的角度。
看看random10NumA(),它采用List来作为容器,利用每次取出数后减少容器大小实现每次取出的数都是非重复的。
看来,看待问题也要随时保持从不同的角度。
public void random10NumA() {
List src = new ArrayList();
for (int i = 1; i <= 10; src.add(String.valueOf(i++)))
;
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));
}
}
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]);
}
}
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
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
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