我现在正在编写一个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);
但程序有时会陷入困境。我找不到原因造成的错误。有人可以帮帮我吗?
答案 0 :(得分:2)
在第一次迭代中,您将max
设置为0
和101
之间的随机数。然后,您取消所有大于该数字的数字。
如果max
为0
,您会丢弃哪些数字?我已经说了所有这些 - 你永远不会找到10
个明显的正整数小于0
或5
。
基本上 - 如果您的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);
。