以下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。
答案 0 :(得分: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循环添加一些花括号,以使其更加直观地发生在&#34;内部&#34;每个循环。如果您编译并运行此版本的代码,您应该会看到每个循环的每次迭代都有很多行。希望当你看到每次迭代的那些单独的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