我是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
有人能给我解释一下吗?
发布于 2013-08-22 05:02:51
循环之间的区别是,在顶部示例中,每次都重置j,但在第二个示例中,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);
}
}发布于 2013-08-22 05:15:21
在您的第一个代码中
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,则保持不变。所以第二个循环的条件失败了。
在case i=0
j=1 declared **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed** loop ends在case i=1
j=3 Already set**Condition Failed** loop ends循环失败
发布于 2013-08-22 05:02:53
它将打印01,02。原因是您没有重新初始化j,所以在内部循环的第二次迭代之后(当i仍然是0时,j是3,因此它会在外层循环的下一个迭代中失败)。
在for-循环声明中定义的变量的范围非常窄。这意味着,一旦循环完成所有的迭代,它们就会死掉(并且需要重新初始化)。在方法主体中定义的变量,正如您在第二个示例中所做的那样,将一直保持到方法本身结束。
https://stackoverflow.com/questions/18371993
复制相似问题