Java嵌套循环初始化

dun*_*t23 5 java nested-loops

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

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

它将运行: 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);
 }
}
Run Code Online (Sandbox Code Playgroud)

它变成这样: 01,02

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

n00*_*gon 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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Pan*_*ool 6

在你的第一个代码中

At case i=0
Run Code Online (Sandbox Code Playgroud)

内循环以条件开始 j=1

j=1 initialized **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed**    loop ends
Run Code Online (Sandbox Code Playgroud)

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

再次

j=1 initialized **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed**    loop ends
Run Code Online (Sandbox Code Playgroud)

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

在情况i = 0的情况下

j=1 declared    **Condition satisfies** continue
j=2 incremented **Condition satisfies** continue
j=3 incremented **Condition Failed**    loop ends
Run Code Online (Sandbox Code Playgroud)

在情况i = 1的情况下

j=3 Already set**Condition Failed**    loop ends
Run Code Online (Sandbox Code Playgroud)

循环失败


Kon*_*Kon 5

它将打印01,02.原因是因为您没有重新初始化j.所以,你的后内循环的第二次迭代(当i仍然是0,j是3,那么它失败每个为外环你的下一个迭代的条件.

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