2015-12-18 77 views
0

不工作,我想打一个arraylistint[]为对象的ArrayList <Integer[]>在java中

ArrayList<Integer[]> b= new ArrayList<Integer[]>(); 
    Integer[] a= new Integer[2]; 
    for(Integer i=0;i<20;i++){ 
     a[0]=i; 
     a[1]=i; 
     b.add(a); 
    } 
    for(int i=0;i<20;i++){ 
     System.out.println("line"+i+"= "+b.get(i)[0]+" "+b.get(i)[1]); 
    } 

,结果我得到的是这种

enter image description here

而不是值(0 0 1 1等),似乎只保存了最后一个。 我也试过用类型int代替整数,但结果相同

回答

2

考虑在循环内初始化a,否则你只是在整个时间写同一个数组。 而不是

ArrayList<Integer[]> b= new ArrayList<Integer[]>(); 
    Integer[] a= new Integer[2]; 
    for(Integer i=0;i<20;i++){ 
     a[0]=i; 
     a[1]=i; 
     b.add(a); 
    } 
    for(int i=0;i<20;i++){ 
     System.out.println("line"+i+"= "+b.get(i)[0]+" "+b.get(i)[1]); 
    } 

考虑这个问题:

ArrayList<Integer[]> b= new ArrayList<Integer[]>(); 
    for(Integer i=0;i<20;i++){ 
     Integer[] a= new Integer[2]; 
     a[0]=i; 
     a[1]=i; 
     b.add(a); 
    } 
    for(int i=0;i<20;i++){ 
     System.out.println("line"+i+"= "+b.get(i)[0]+" "+b.get(i)[1]); 
    } 

由于点是每个循环迭代做出新的阵列和存储新值,而不是覆盖现有的,如果你通过你的代码步骤你可能会注意到你永远不会在循环中分配一个新的数组。

+0

非常感谢你的工作!我以为你只是简单地加入这个对象的内部 –

2

你必须为你要添加的每个元素声明一个新的数组。否则,它们都会引用相同的内存。在for循环中声明数组,而不是在循环之前。

相关问题