Java 2D arraylists ndexOutOfBoundsException:Index:0,Size:0

时间:2015-07-29 21:44:02

标签: java arraylist

我是Java新手。试图创建2D arraylist,但得到这个indexOutOfBoundsException:索引:0,大小:0

ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<>();
for (int i = 0; i < 4; i++)
{
    twoDArrayList.add(new ArrayList<>());
    twoDArrayList.get(i).set(0,1); 
}

为什么第二行在for循环中失败?当i = 0时,已经有一行 使用add(new ArrayList<>())

创建

-------------------------------谢谢你的提示! ---------------------

现在我终于有了一个打印Pascal三角形的解决方案.....前5行

的ArrayList&GT; twoDArrayList = new ArrayList&lt;&gt;();

    for (int i=0; i < 5; i++)
    {

        ArrayList<Integer> row = new ArrayList<>();

        for (int j = 0; j <= i ; j++)
        {
            row.add(0);
        }

        row.set(0, 1);
        row.set(i, 1);

        twoDArrayList.add(row);


        for (int j=1; j < i; j++)
        {
            twoDArrayList.get(i).set(j, twoDArrayList.get(i-1).get(j-1) + twoDArrayList.get(i-1).get(j));
        }

    }


    for (ArrayList<Integer> row: twoDArrayList)
    {
        for (Integer element: row)
        {
            System.out.printf("%4d",element);
        }
        System.out.println();
    }

4 个答案:

答案 0 :(得分:1)

您的行是使用空列表创建的。

来自twoDArray.get(i)的值将是一个大小为0的列表。

答案 1 :(得分:0)

arraylist set方法不会添加对象,而是替换为指定位置的对象。

在for循环的第一行中,实例化一个空的arraylist。 然后在for循环的第二行中,访问新实例化的数组列表并尝试用整数“1”替换第一个位置的元素 - 这会产生索引超出范围的异常,因为第一个位置没有元素/空。

答案 2 :(得分:0)

ArrayList<ArrayList<Integer>> twoDArrayList = new ArrayList<>();
   for (int i = 0; i < 4; i++)
    {
       ArrayList<Integer> al = new ArrayList<>();
       al.add(i,1);
       twoDArrayList.add(al);
       twoDArrayList.get(i).set(0,1); 
    }

答案 3 :(得分:-2)

public <T> List<T> twoDArrayToList(T[][] twoDArray) {
    List<T> list = new ArrayList<T>();
    for (T[] array : twoDArray) {
        list.addAll(Arrays.asList(array));
    }
    return list;
}