【问题标题】:Tracing a Nested java for loop跟踪嵌套的 java for 循环
【发布时间】:2016-04-09 05:26:35
【问题描述】:

代码段为:

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]]

为什么会这样?

谢谢

我已经编辑了代码

【问题讨论】:

  • 您每次都添加相同的数组。
  • 代码完全没用。您一直在将inner 添加到inner (甚至无法编译,因为inner 不是整数,因此不适合自身),而不添加其他内容。从来没有添加任何数字。所以你说的不适合你的代码。修复你的代码。
  • 为什么要将inner 添加到inner?请尝试至少思考
  • 很抱歉我打错了
  • 这是否增加了inner 数组列表和size 的每个迭代3 个像[1,2,3], [1,2,3,4,5,6],[1,2,3,4,5,6,7,8,9]

标签: java arraylist nested-loops


【解决方案1】:

这是您尝试打印的完整工作代码。试试这个。

     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&lt;Integer&gt; 的不同对象。因此,每次添加int count 时,都会添加到相同的object

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

在第二次迭代中,i=2 然后inner 再次循环初始化之前的inner ArrayList 对象,它已经包含[1,2,3] 现在添加[4,5,6] 到它。所以ArrayList&lt;Integer&gt; inner变成[ 1 , 2 , 3 , 4 , 5 , 6 ]

希望你弄错了。

【讨论】:

    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多