日期:2014-05-20  浏览次数:20606 次

关于random取值的问题,求指教
之前想用random在0~100之间取100个互不相同的数,结果发现只取了61个数程序就自动结束了,求大神指教,为什么会这样,有好的解决方法吗,不要那种扩大取值范围的。谢谢!

------解决方案--------------------
首先,可以运行并不代表程序没问题,至少不能意味着执行了你的意图
for(int i=0;i<100;i++)
{
int j=ran.nextInt(100);
if(s.contains(j))
j=ran.nextInt(100);//这条语句运行结束之后就会跳到下一个循环论。下面那个s.add(j);就不会运行了。你这样取不到100个值就是很自然的了。。因为虽然运行了100次,但是并没有赋值100次。

else{
s.add(j);

}

可以改成:
public static void main(String[] args) {
Random ran = new Random();
ArrayList<Integer> s = new ArrayList<Integer>();
s.add(ran.nextInt(100));
for (int i = 0; i < 100; i++) {
int j = ran.nextInt(100);
if (s.contains(j)){
while(!s.contains(j)){
j = ran.nextInt(100);
}
s.add(j);
}else {
s.add(j);

}

}
}

另外楼主有没有想过,如果这样随机取值的话,找不到最后一个数需要运行100次,有没有想到集合的概念?从集合中随机取数,而不是0-100这样的范围。