我是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
任何人都可以向我解释一下吗?
循环之间的区别在于每次在顶部示例中重置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)
在你的第一个代码中
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)
循环失败
它将打印01,02.原因是因为您没有重新初始化j.所以,你的后内循环的第二次迭代(当i仍然是0,j是3,那么它失败每个为外环你的下一个迭代的条件.
在for循环声明中定义的变量具有极窄的范围.这意味着一旦循环完成所有迭代,它们就会死亡(并且需要重新初始化).正如您在第二个示例中所做的那样,方法体中定义的变量将持续存在,直到方法本身结束.
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |