我想将arraylist
与int[]
作为对象
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]);
}
我得到的结果就是这个
而不是值(0 0 1 1等),似乎只保存了最后一个。 我也尝试使用int类型而不是Integer但结果相同
答案 0 :(得分: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]);
}
关于每个循环迭代的重点是创建一个新数组并存储新值而不是覆盖现有数组,就好像你单步执行代码一样,你可能会注意到你怎么不在其中分配一个新数组。循环。
答案 1 :(得分:2)
您必须为要添加的每个元素声明一个新数组。否则他们都引用相同的内存。在for循环中而不是在循环之前声明数组。