生成循环中的随机数

时间:2016-01-12 14:18:28

标签: java loops random

我现在正在编写一个JAVA程序,在100和一个小于100(包括)的随机数之间产生10个不同的随机数,并按排序顺序显示它们。这是我写的代码

Random rnd = new Random();
ArrayList<Integer> rndNums = new ArrayList<Integer>(10);
int max = 0;
while(rndNums.size() < 10) {
    if(rndNums.size() == 0)
        max = rnd.nextInt(101);
    int num = rnd.nextInt(101);
    if(num >= max || rndNums.contains(num))
        continue;
    rndNums.add(num);
}   
Collections.sort(rndNums);
for(int i : rndNums)
    System.out.println (i);

但程序有时会陷入困境。我找不到原因造成的错误。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

在第一次迭代中,您将max设置为0101之间的随机数。然后,您取消所有大于该数字的数字。

如果max0,您会丢弃哪些数字?我已经说了所有这些 - 你永远不会找到10个明显的正整数小于05

基本上 - 如果您的max值小于10,您将永远循环。

答案 1 :(得分:0)

首先,此代码生成十个不同的随机数,从0到100(包括),当它工作时。

问题是,如果选择max小于10且num选择小于max,则无法获得十个不同的数字,因此代码永远循环。例如,如果max设置为5而num设置为3,则3将添加到rndNums并且循环将继续,但是可以添加的唯一数字它们是0,1,2和4,当rndNums.size()为5时将耗尽,此时代码永远循环,因为它已经耗尽了所有可能性,rndNums的元素少于10个。

您可以将max初始化为10 + rnd.nextInt(91)以防止这种情况发生,您甚至不需要将其置于循环中,因为您可以保证减少10个数字比max。然后,您可以在循环中将num设置为rnd.nextInt(max),以提高效率。

如果你真的想要数字&#34;在100和一个小于100(包括)的随机数&#34;之间。然后使用max = rnd.nextInt(92);num = max + rnd.nextInt(101 - max);