2015-12-04 93 views
2
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; 
} 

的ArrayList的方法每当我跑,我得到一个异常线程“main” java.lang.IndexOutOfBoundsException:指数:0,大小:0如何创建生成随机数

+0

最初的一部分,当你声明一个数组列表,后端数组是空的。所以,当你调用add()第一个元素时,只会创建默认大小的数组。而且,正如你使用set(),这意味着你正试图在一个空数组的索引中设置值。 –

+0

所以你可以用add()替换set()。 –

+0

不需要在Main中创建该ArrayList对象,因为您从方法中返回一个,并将其分配给该变量,该变量“覆盖”之前的值。 – null

回答

3

变化

randomNumbers.set(i, new Random().nextInt(range)+1); 

randomNumbers.add(new Random().nextInt(range)+1); 

的一个ArrayList的方法工作的ArrayList现有元素,但在你的情况下,它,这意味着到

randomNumbers.set(i, new Random().nextInt(range)+1); 

其中i == 0是无效的第一个电话。改为使用add()

0

Arraylistarrays支持,当您使用set方法与index,它试图设置为自支持arrayindex值是空的,你得到一个IndexOutOfBoundsException,所以首先你需要填充Arraylist

对于您需要使用add方法,而不是set

0

除了JDev's correct response above,看一看的描述ArrayList#setJavadoc

在指定替换元素在该列表中与指定元素一起定位。

因此,指定的索引必须已经填充,以使ArrayList#set调用成功。

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); 
0

如果你愿意,你也可以使用功能的风格:

List<Integer> list = IntStream.range(0, 100) 
    .mapToObj(i -> random.nextInt(100)) 
    .collect(Collectors.toList()); 

这将minimize the moving parts是什么导致你的问题:)

+1

这是不必要的复杂。只需使用random.ints(100,0,100).boxed()。collect(Collectors.toList())' – Holger

+0

酷!我不知道'boxed()' – uzilan