我真的不明白发生了什么,如果有人可以向我解释这将是伟大的.
所以,这是我的代码:
public static ArrayList<Integer> numbers = new ArrayList<Integer>();
public static void main(String[] args){
for(int i =0; i != 90; i++){
System.out.println(generate());
}
}
public static int generate(){
Random random = new Random();
int rand = random.nextInt(89)+1;
while(numbers.contains(rand)){ //<---Here seems to be my problem
rand = random.nextInt(89)+1;
System.out.println("Number: " + rand + " already exists!");
}
numbers.add(rand);
return rand;
}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个程序,它生成一个0-90的随机数,每个都与上一个不同.不幸的是,似乎while循环只返回true.
Jon*_*eet 10
你从89个随机数字(1-89包括在内)中挑选,并且每次都试图找到一个唯一的数字......但是你要打90次.你期望最后一次迭代做什么?(换句话说 - 你试图将90个数字压缩到89个插槽中.这不会起作用.)在最后一次迭代中,所有可能的值都已经在列表中,因此while循环的条件总是如此无论在每次迭代中随机选择什么值,都要满足.
如果您希望数字介于1和90之间,则应该使用random.nextInt(90) + 1.参数to nextInt是生成的唯一最大数量- 因此,如果您调用random.nextInt(3)它,它将生成0,1或2.
(顺便说一下,有更好的方法可以做到这一点 - 例如填充列表然后使用Collections.shuffle- 但我专注于解释当前代码的行为.)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |