为什么下面的程序打印两次“ Hello”而不是两次?

时间:2019-12-01 02:29:41

标签: java

我现在正在学习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");        
            }   
        }
    }
}

5 个答案:

答案 0 :(得分:5)

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.

这是上面的代码运行时发生的情况。

答案 1 :(得分:3)

要了解原因,请更改

System.out.println("Hello"); 

System.out.println("Hello: i = " + i + ", j = " + j); 

再次编译并运行它,并仔细查看打印出的ij的值。

基本上,在外循环的第二次迭代中,内循环运行两次。


如果无法编译和运行程序,则可以使用另一种方式来了解行为。手动执行它。

用铅笔纸,在每个变量的表上画一列。每次变量被分配/修改(例如i = 0i++)时,将使用所有变量的 current 值向表中添加新行。当您进行测试时(例如i<=2),请从表的最新行中读取变量的值。

经过一些练习,您将可以在头脑中做到这一点。经过更多练习之后,您将能够阅读代码(就像阅读英文文本或数学符号一样),并能够原因了解代码的用途。

或使用调试器:-)

答案 2 :(得分:3)

有时候学习循环时,在纸上写一些小循环会有所帮助。

在这里,您使用变量i和j进行了嵌套循环。

首先,内部循环j = 1,且1小于或等于1(i),因此进行打印。然后是j ++。

j现在为2,不小于或等于1,结束内部循环周期。现在回到外循环,i ++,

i现在是2。 在内部循环内-j = 1,小于或等于2,因此进行第二次打印。现在是j ++。条件仍然成立,因为j(as 2)仍小于或等于2,因此第三次打印。

希望此调试方法对您有所帮助。

答案 3 :(得分:1)

您有两个循环。 i外部循环运行两次,而内部j循环则取决于ij<=i部分的值。因此,对于第一个i循环,j运行一次,而第二个i循环j运行两次,因此运行了三遍。

答案 4 :(得分:0)

这与嵌套循环有关。这里有(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

如果您想更详细地了解嵌套循环,请推荐以下精彩视频系列:Nested Looping (The Coding Train)

希望这会有所帮助!