[英]Comprehension of a for loop
以下 Java 代码片段的输出是 10,但我不明白为什么。
public class CodeComprehension {
public static void main(String[] args) {
int count = 0;
for(int i=0;i<5;i++)
for(int j=0;j<i;j++)
for(int k=0;k<j;k++)
count++;
System.out.println(count);
}
}
int
变量count
没有出现在三个for
循环中。 在我看来,输出应该是 1。
我将继续并添加一个答案以防止任何进一步的混淆。 基本上自我回答这个问题的建议是这样做:
public static void main(String[] args) {
int count = 0;
for(int i=0;i<5;i++) {
System.out.println("I-LOOP: I: "+ i + ", COUNT: " + count);
for(int j=0;j<i;j++) {
System.out.println(" J-LOOP: I: "+ i + ", J: " + j + ", COUNT: " + count);
for(int k=0;k<j;k++) {
// this is the code actually inside the loop(s)
count++;
System.out.println(" K-LOOP: I: "+ i + ", J: " + j + ", K: " + k + ", COUNT: " + count);
}
}
}
System.out.println("END COUNT: " + count);
}
我在这里所做的是在 for 循环中添加一些花括号,使每个循环“内部”发生的事情更加直观。 如果您编译并运行此版本的代码,您应该会看到每个循环的每次迭代都有很多行。 希望当您看到每次迭代的这些单独的 i、j 和 k 值时,您会更容易理解嵌套循环时代码的流程。
有两个主要的事情要从这里带走;
System.out.println() 是您拥有的最好的调试和理解工具。 不要使用它,滥用它。
始终在循环语句中使用花括号。 代码更易于阅读,并且消除了犯错的任何可能性。
这是输出:
I-LOOP: I: 0, COUNT: 0
I-LOOP: I: 1, COUNT: 0
J-LOOP: I: 1, J: 0, COUNT: 0
I-LOOP: I: 2, COUNT: 0
J-LOOP: I: 2, J: 0, COUNT: 0
J-LOOP: I: 2, J: 1, COUNT: 0
K-LOOP: I: 2, J: 1, K: 0, COUNT: 1
I-LOOP: I: 3, COUNT: 1
J-LOOP: I: 3, J: 0, COUNT: 1
J-LOOP: I: 3, J: 1, COUNT: 1
K-LOOP: I: 3, J: 1, K: 0, COUNT: 2
J-LOOP: I: 3, J: 2, COUNT: 2
K-LOOP: I: 3, J: 2, K: 0, COUNT: 3
K-LOOP: I: 3, J: 2, K: 1, COUNT: 4
I-LOOP: I: 4, COUNT: 4
J-LOOP: I: 4, J: 0, COUNT: 4
J-LOOP: I: 4, J: 1, COUNT: 4
K-LOOP: I: 4, J: 1, K: 0, COUNT: 5
J-LOOP: I: 4, J: 2, COUNT: 5
K-LOOP: I: 4, J: 2, K: 0, COUNT: 6
K-LOOP: I: 4, J: 2, K: 1, COUNT: 7
J-LOOP: I: 4, J: 3, COUNT: 7
K-LOOP: I: 4, J: 3, K: 0, COUNT: 8
K-LOOP: I: 4, J: 3, K: 1, COUNT: 9
K-LOOP: I: 4, J: 3, K: 2, COUNT: 10
END COUNT: 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.