我是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
任何人都可以向我解释一下吗?
答案 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
,因此它不满足循环条件并且不执行循环体。以下时间相同。