2014-02-23 98 views
1

我在這裏試圖從我的二維ArrayList得到一個元素,但得到IndexOutOfBoundException錯誤。我在這裏做錯了什麼?我是否需要首先分配一個簡單數組中的空間?如果是這樣,我怎樣才能做到二維數組?以下是代碼,二維ArrayList錯誤

import java.util.ArrayList; 

public class Test { 
    private ArrayList<ArrayList<String>> array; 

    public Test(){ 
     array = new ArrayList<ArrayList<String>>(); 
     array.get(0).set(0, "00"); 
     array.get(0).set(1, "01"); 
     array.get(0).set(2, "02"); 
     array.get(1).set(0, "10"); 
     array.get(1).set(1, "11"); 
     array.get(1).set(2, "12"); 
     array.get(2).set(0, "20"); 
     array.get(2).set(1, "21"); 
     array.get(2).set(2, "22"); 
    } 

    public String getE(int a, int b){ 
     return array.get(a).get(b); 
    } 

    public static void main(String[] args) { 
     Test object = new Test(); 
     System.out.println(object.getE(0, 0)); // This gives me the error. 
    } 
} 

回答

2

在插入它們之前,您需要初始化ArrayList。就像這樣:

public Test(){ 
    array = new ArrayList<ArrayList<String>>(); 
    array.add(new ArrayList<String>()); 
    array.add(new ArrayList<String>()); 
    array.add(new ArrayList<String>()); 
    array.get(0).add("00"); 
    array.get(0).add("01"); 
    array.get(0).add("02"); 
    array.get(1).add("10"); 
    array.get(1).add("11"); 
    array.get(1).add("12"); 
    array.get(2).add("20"); 
    array.get(2).add("21"); 
    array.get(2).add("22"); 
} 

眼下,array是空的,所以叫array.get(0)將導致IndexOutOfBoundException。一旦你在索引0處添加一個初始化的ArrayList,你將不會再出現這個錯誤。

構造函數ArrayList<ArrayList<String>>()爲空ArrayList<ArrayList<String>>。它不初始化array的內容;你需要自己做。

此外,使用set(int i , E e)給出了同樣的問題,如果索引i中沒有元素。您應該使用add(E e)。你可以閱讀更多關於set()http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,E)。

+0

我不是在構造函數中做的嗎?我不是用這行代碼初始化ArrayList array = new ArrayList >();'? – Zip

+0

哦,我明白了。我是否必須爲每一行初始化一個新的'ArrayList'才能獲得二維數組列表? – Zip

+0

@Zip你正在用構造函數製作一個**空**'ArrayList >'。您需要將初始化的'ArrayList '添加到'array'。 – fvrghl