我必须返回ArrayList
中的ArrayList<Integer>
,因为它是预定义的。
我正在尝试此代码(对于n行的帕斯卡三角形):
ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> b = new ArrayList<Integer>();
for(int i=1;i<=n;i++){
int c=1;
//ArrayList<Integer> b = new ArrayList<Integer>(); I declared
//the arraylist here to solve the problem
// Place 1: b.clear()
for(int j=1;j<=i;j++){
b.add(c);
c=(c*(i-j))/j;
}
a.add(b);
// Place 2: b.clear();
}
return a;
预期输出:
n=4
:[1 ] [1 1 ] [1 2 1 ] [1 3 3 1 ]
我想知道为什么在以下位置放置了清晰的函数时却没有得到想要的输出:
放置1个输出:[1 3 3 1 ] [1 3 3 1 ] [1 3 3 1 ] [1 3 3 1 ]
(仅最后一行)
地方2:[ ] [ ] [ ] [ ]
(无输出)
removeAll()
也是如此。
答案 0 :(得分:1)
即使您已清除,它也与ArrayList
相同。因此,修改一个副本也会同时修改所有其他副本。您实际上应该在创建ArrayList
的新实例,而不是清除它。修改后的代码如下:
ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> b;
for (int i = 1; i <= n; i++) {
int c = 1;
// ArrayList<Integer> b = new ArrayList<Integer>(); I declared
// the arraylist here to solve the problem
b = new ArrayList<Integer>(); // NEW INSTANCE INSTEAD OF CLEARING IT
for (int j = 1; j <= i; j++) {
b.add(c);
c = (c * (i - j)) / j;
}
a.add(b);
}
return a;
答案 1 :(得分:1)
不确定您是否理解问题 由于数组b在for循环外部声明,因此在外部循环上进行每次迭代之后,将使用同一对象并继续使用旧值。
要获得期望的输出,请在外循环中创建新的b对象
代替
ArrayList<Integer> b = new ArrayList<Integer>();
for(int i=1;i<=n;i++){
尝试
ArrayList<Integer> b = null;
for(int i=1;i<=n;i++){
b = new ArrayList<Integer>();