跟踪嵌套的 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]
。因此 output
即 outer
将是 [[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 ]
.
希望你理解错了。
代码段为:
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]
。因此 output
即 outer
将是 [[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 ]
.
希望你理解错了。