Java嵌套循环初始化

时间:2013-08-22 05:01:30

标签: java nested-loops

我是java的新手,所以在嵌套循环中有一段代码我不明白......

for(int i=0; i<3; i++){
 for(int j=1; j<3; j++){
   System.out.println(i + "" + j);
 }
}

它将运行:01,02,11,12,21,22

但是当我改变这个时:

int j=1;
for(int i=0; i<3; i++){
 for(; j<3; j++){
   System.out.println(i + "" + j);
 }
}

它变成这样:01,02

任何人都可以向我解释一下吗?

5 个答案:

答案 0 :(得分:7)

循环之间的区别在于每次在顶部示例中都重置j,但在第二个示例中它保持其值。

在上面的示例中,每次内部for循环开始时,j将重新激活为1,因此它将通过1,2,3值。当j变为3时,它将退出循环,这就是为什么你看到j值为1然后2.每次外循环运行时运行,给你i值的0,1和2。

在底部示例中,j永远不会重置,因此它只会增加。第一次通过循环时,它会通过1,2,3值并退出循环,为您提供所见的01,02值。由于它没有被重置,所以它保持为3,因此我增加了内部循环将始终退出而不打印,为您提供您所看到的输出。

要获得底部示例的相同输出,您需要将值重置为1,这基本上就是for循环的第一个元素。

int j = 1;
for(int i = 0; i < 3; i++) {
    j = 1; //reset the value each time through the outer loop
    for(; j < 3; j++) {
        System.out.println(i + "" + j);
    }
}

答案 1 :(得分:6)

在您的第一个代码中

At case i=0

内部循环以条件j=1

开头
j=1 initialized **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed**    loop ends

内部首先执行完整循环并且倾向于增加i 现在i = 1

再次

j=1 initialized **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed**    loop ends

但是在第二个代码中,j被声明为外部,一旦j设置为3,它将保持不变。 因此第二次循环条件失败。

如果i = 0

j=1 declared    **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed**    loop ends

如果情况i = 1

j=3 Already set**Condition Failed**    loop ends

循环失败

答案 2 :(得分:5)

它将打印01,02。原因是因为您没有重新初始化j。因此,在内循环的第二次迭代之后(当i仍为0时,j为3,因此它在下一次迭代的外循环中失败了。

for-loop声明中定义的变量具有极窄的范围。这意味着一旦循环完成所有迭代,它们就会死亡(并且需要重新初始化)。正如您在第二个示例中所做的那样,方法体中定义的变量将持续存在,直到方法本身结束。

答案 3 :(得分:3)

代码1: 我的价值观是:0,1,2 j:1,2

因此输出: 01 02 11 12 21 22

但在代码2中: J最初设置为1 所以在我的第一次迭代中,即 对于i = 0 - > j = 1,2

然后进行下一次迭代。 j的值没有设置回1.所以j = 3.并且代码不能进入j的循环。

希望有足够清楚的解释。

答案 4 :(得分:3)

j未在第二个编码块的for中初始化。然后循环将以j的当前值开始。第一次输入for时,j为1,并且一直循环直到j为3.第二次到达for时,j为仍然3,因此它不满足循环条件并且不执行循环体。以下时间相同。