2015-12-04 90 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