繁体   English   中英

理解 for 循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM