2014-02-23 117 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