[英]Why the following program printing "Hello" three time and not two?
我现在正在学习java,在java中遍历循环时,我被困在这里,我无法理解为什么下面的程序打印“Hello”三遍。 你能解释一下吗?
public class Helloworld {
public static void main(String[] args) {
for (int i =1; i<=2; i++ ) {
for (int j =1; j<=i ; j++) {
System.out.println("Hello");
}
}
}
}
for
循环迭代:
i=1
j=1 — prints "Hello"
j=2 — breaks out of inner loop, `j <= i` is false.
i=2
j=1 — prints "Hello"
j=2 — prints "Hello"
j=3 — breaks out of inner loop, `j <= i` is false.
这就是运行上述代码时发生的情况。
要了解原因,请更改
System.out.println("Hello");
到
System.out.println("Hello: i = " + i + ", j = " + j);
再次编译运行,仔细查看打印出来的i
和j
的值。
基本上,在外循环的第二次迭代中,内循环运行了两次。
如果您无法编译和运行该程序,则可以通过另一种方式来理解该行为。 手动执行。
拿一支铅笔一张纸,画一张表格,每个变量都有一列。 每次将变量分配给/修改(例如i = 0
或i++
)时,都会向表中添加一个新行,其中包含所有变量的当前值。 当您进行测试时(例如i<=2
)从表中的最新行读取变量的值。
经过一些练习,您将能够在头脑中做到这一点。 经过更多练习,您将能够阅读代码(就像阅读英文文本或数学符号一样)并推理代码的作用。
或者使用调试器:-)
有时在学习循环时,在纸上写小循环会有所帮助。
在这里,您可以使用变量 i 和 j 构建一个嵌套循环。
首先,内循环,j=1,1小于等于1(i),所以打印。 然后j++。
j 现在是 2,不小于或等于 1,结束内循环循环。 现在回到外循环,i++,
i 现在是 2。在内循环中 - j=1,小于或等于 2,所以第二次打印。 现在j++。 条件仍然成立,因为 j(as 2) 仍然小于或等于 2,所以第三次打印。
希望这个调试方法对你有帮助。
你有两个循环。 外部i
循环运行两次,但内部j
循环取决于带有j<=i
部分的i
值。 所以对于第一个i
循环, j
运行一次,第二个i
循环j
运行两次,所以总共运行了 3 次。
这与嵌套循环有关。 这里有 (2) 个循环需要注意。 对于外循环 (i) 的每次迭代,内循环 (j) 可能会运行多次。 如果您将输出更改为输出迭代器,它将为您提供对该属性的一些可见性。
System.out.println("i:"+i+" j:"+j);
OUTPUT: $javac HelloWorld.java
i: 1 j:1
i: 2 j:1
i: 2 j:2
如果你想更详细地了解嵌套循环,这里有一个很好的视频系列我推荐:嵌套循环(编码火车)
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.