我是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();
}
答案 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;
}