import java.util.ArrayList;
import java.util.Random;
public static void main(String[] args) {
ArrayList<Integer> random = new ArrayList<Integer>();
random = getRandom(100, 100);
for (int i = 0; i < random.size(); i++)
System.out.println(random.get(i));
}
private static ArrayList<Integer> getRandom(int range, int size) {
ArrayList<Integer> randomNumbers = new ArrayList<Integer>();
for (int i = 0; i < size; i++)
randomNumbers.set(i, new Random().nextInt(range)+1);
return randomNumbers;
}
每当我运行它时,我在线程“main”中得到一个异常java.lang.IndexOutOfBoundsException:索引:0,大小:0
答案 0 :(得分:3)
更改
randomNumbers.set(i, new Random().nextInt(range)+1);
到
randomNumbers.add(new Random().nextInt(range)+1);
set()
的{{1}}方法适用于ArrayList
的现有元素,但在您的情况下,为空,这意味着第一次调用
ArrayList
randomNumbers.set(i, new Random().nextInt(range)+1);
无效。请改用i == 0
。
答案 1 :(得分:0)
Arraylist
由arrays
支持,当您对set
使用index
方法时,它会尝试将值设置为index
array
为空IndexOutOfBoundsException
,因此首先需要填充Arraylist
。
为此,您需要使用add
方法,而不是set
答案 2 :(得分:0)
除了JDev's correct response above之外,请查看ArrayList#set
的{{3}}的说明:
使用指定的元素替换此列表中指定位置的元素。
因此,必须填充指定的索引才能使ArrayList#set
调用成功。
答案 3 :(得分:0)
arrayList.set(index, value) method is used to replace old value with new value. But in your case, you are not replacing a value. You are just simply adding values.
So, Use add method of list.
randomNumbers.add(new Random().nextInt(range)+1);
And for printing the values of Arraylist, you are using:
for (int i = 0; i < random.size(); i++)
System.out.println(random.get(i));
but no need to iterate it through for loop, You can directly print this like below:
System.out.println(random);
答案 4 :(得分:0)
如果需要,您还可以使用功能样式:
List<Integer> list = IntStream.range(0, 100)
.mapToObj(i -> random.nextInt(100))
.collect(Collectors.toList());
这将导致您的问题成为minimize the moving parts的一部分:)