2014-11-24 123 views
0

我使用ArrayList里面的ArrayList来创建一个总共10个插槽组,分成另外10个插槽,每个插槽存储整数。ArrayList <ArrayList <Integer>> IndexOutOfBoundsException

我的代码: -

import java.util.ArrayList; 

public class abc 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 

     for(int i=0;i<10;i++) 
     { 
     for(int j=0;j<10;j++) 
     { 
     (a.get(i)).add(j,j); 
     } 
     } 
    } 
} 

错误: -

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 

     at java.util.ArrayList.rangeCheck(ArrayList.java:604) 
     at java.util.ArrayList.get(ArrayList.java:382) 
     at abc.main(abc.java:18) 

你能指出我在做什么错?

+4

'a.get(i)'失败,因为您从未向'a'添加任何内容。 – 2014-11-24 19:45:38

+0

列表列表已经非常难以琢磨,因此您可能还需要考虑在您的循环中修复缩进 – personne3000 2014-11-24 19:49:11

+0

尽管名称不同,“ArrayList”类的行为完全不像数组;它的名字是根据它的实施情况来选择的。它实现了'List'接口,并以零(0)大小开始,而不管其初始容量。因此,您需要将项目添加到列表中才能访问它们。 – 2014-11-24 19:50:16

回答

3

你想要做的是首先在a中添加一些东西因为你总是读取外部列表上的i值,我们在外部循环中添加一个新的数组列表。

import java.util.ArrayList; 

public class abc 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 
     for(int i=0;i<10;i++) { 
      a.add(new ArrayList<Integer>); 
      for(int j=0;j<10;j++) 
      { 
       (a.get(i)).add(j,j); 
      } 
     } 
    } 
} 
+0

虽然我同意,但我仍然困惑为什么'add(j,j)'起作用。是不是在整数的ArrayList? – AdamMc331 2014-11-24 19:51:04

+0

@ McAdam331如果你阅读[java doc](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(int,%20E)),你会发现它会将其添加到该索引处。 – StackFlowed 2014-11-24 19:52:08

+2

@ brso05那它有什么价值?为什么不应该是'add(j)'? – AdamMc331 2014-11-24 19:52:40

1

首先必须的元素添加到阵列之前,您可以访问:

public static void main(String[] args) 
    { 
     ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 

     for(int i=0;i<10;i++) 
     { 
      a.add(new ArrayList<Integer>()); 
      for(int j=0;j<10;j++) 
      { 
       (a.get(i)).add(j,j); 
      } 
     } 
    } 

您试图访问首次a.get(i)一个不存在的元素。

2

的说是更优雅的解决方案并不需要get和两个参数add

public class abc 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 

     for(int i=0;i<10;i++) 
     { 
      ArrayList<Integer> inner = new ArrayList<Integer>(); 
      a.add(inner); 
      for(int j=0;j<10;j++) 
      { 
       inner.add(j); 
      } 
     } 
    } 
} 
1

这会让你的代码工作:

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

    for(int i=0;i<10;i++) 
    { 
     a.add(new ArrayList<Integer>()); //Add this line 
     for(int j=0;j<10;j++)    
      a.get(i).add(j); //You should only add 1 integer value 
    } 

原因的附加声明:你有一个类型为arrayList的arrayList。由于您的外部arrayList为空,因此您需要首先添加arrayList,然后才能将整数值添加到内部arrayList

1

该方法消除了对get呼叫的需要。

import java.util.ArrayList; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(); 

     for(int i = 0;i < 10; ++i) 
     { 
      ArrayList<Integer> b = new ArrayList<Integer>(); 
      a.add(b); 

      for(int j = 0; j < 10; ++j) 
      { 
       b.add(j); 
      } 
     } 
    } 
} 
相关问题