跟踪嵌套的 java for 循环

Tracing a Nested java for loop

代码段为:

ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> inner = new ArrayList<Integer>();
int count = 0;
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) {
        count++;
        inner.add(count);
    }
    outer.add(inner);
}
System.out.println(outer);

我这样跟踪循环: 当 i = 0 时,内部将更新为 [1, 2, 3]。因此 outer 将是 [[1, 2, 3]].

i = 1时,inner将更新为[1, 2, 3, 4, 5, 6]。因此 outputouter 将是 [[1, 2, 3], [1, 2, 3, 4, 5, 6]]

但是,当我运行程序时,output实际上是[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]]

为什么会这样?

谢谢

我已经编辑了代码

Here is Complete Working code what you try to print Exactly. Try this out.

     ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
     ArrayList<Integer> inner ;
        for (int i = 1; i <= 2; i++) {
            inner = new ArrayList<Integer>(); //each time new ArrayList<Integer> Need to Create. 
           for (int j = 1; j <= i*3; j++) {

               inner.add(j);
        }
          outer.add(inner);
      }
System.out.println(outer);

输出 :

[[1, 2, 3], [1, 2, 3, 4, 5, 6]]

您犯的错误是您没有在外循环 i 的每次迭代中创建 ArrayList<Integer> 的不同对象。因此,每次添加 int count 都会添加到相同的 object

例如:- 在第一次迭代中,当 i = 1 然后 inner 循环会将 [1,2,3] 添加到 inner ArrayList。

在第二次迭代中 i=2 然后 inner 再次循环 初始化已经包含 [1,2,3] 的前一个 inner ArrayList 对象 现在添加 [4,5,6] .所以 ArrayList<Integer> inner 变成 [ 1 , 2 , 3 , 4 , 5 , 6 ].

希望你理解错了。