【发布时间】:2019-12-25 05:05:46
【问题描述】:
我正在做的在线课程有问题。问题是:
给定一个整数 x,编写一个程序,生成 x 和 0 之间的随机数,直到该范围内的每个数字至少生成一次。生成此范围内的所有数字后,程序应显示生成的数字。
我编写了一个程序,我认为它可以解决这个问题,但是在检查数字是否在范围内时遇到了问题。到目前为止,这是我的代码:
public static void main(String[] args) {
Random generator = new Random();
ArrayList<Integer> range = new ArrayList<Integer>();
ArrayList<Integer> generated = new ArrayList<Integer>();
int x = 10;
int count = 0;
for(int i = 0; i<x+1; i++){
range.add(i);
}
while(range.isEmpty() != true){
int temp = generator.nextInt(x-1);
count++;
generated.add(temp);
if(range.contains(temp)){
range.remove(temp);
}
}
}
}
我的想法是首先创建两个数组列表。第一个将包含 0 和给定 x 之间的所有数字。第二个将包含生成的随机数。然后我用 0 到 x 之间的范围填充范围数组列表。然后我的 While 循环检查此范围列表以查看它是否为空。如果没有,它会生成一个随机数,将其添加到我的第二个数组列表中。然后我检查这个数字是否在数组列表范围内 - 如果是,它会删除它并继续。我遇到的问题是它在几次运行后遇到了 IndexOutOfBoundsException。我认为这是因为我正在从数组列表中删除生成的数字。谁能帮我解决这个问题
编辑:我不能使用任何集合或其他 API。这部分课程主要是关于使用数组和循环等,而不是高级 Java 的东西。
【问题讨论】:
-
set和set1未声明 -
@njzk2 抱歉,名称仍然在代码中设置和设置1,但应该是范围和生成的,我现在将更改它
-
在真实代码中使用
List<Integer> range = IntStream.rangeClosed(0, x).boxed().collect(Collectors.toList()); Collections.shuffle(range, generator); System.out.println(range); -
@ElliottFrisch 分配不是随机排列数字,而是不断生成随机数,直到生成范围内的所有数字。例如。对于 0-3 范围内的数字,您可能会得到
2,0,2,3,3,2,0,1作为结果。 -
并且提示:当你必须从 0 到 n 中创建 n 个随机数时,则没有随机数。这里唯一随机的就是顺序。您也可以只创建一个包含所有数字的数组,然后打乱数组。
标签: java arraylist indexoutofboundsexception