帮助我理解java中这个循环中发生的事情

时间:2012-08-15 23:25:48

标签: java loops

PrintStream out = System.out;

    int sum = 0;
    for(int i = 0; i<5; i++)
        for(int j=i; j<5; j++)
            sum++;
    out.println(sum);

输出:15。我不知道这是怎么得到的15.我试着在头脑中解决它,我一直在25岁。

如果我们忽略第二个for循环,并将sum ++放在第一个for循环中,你就得到5.但是我们如何从第二个for循环获得15?

PrintStream out = System.out;

    int sum = 0;
    for(int i = 0; i<5; i++)
        for(int j=i; j<5; j++);
            sum++;
    out.println(sum);

输出:1。如果放入会发生什么;在声明之后。它会停止吗?

4 个答案:

答案 0 :(得分:6)

i = 0 => j goes from 0 to 4 => sum = 5  
i = 1 => j goes from 1 to 4 => sum = 5 + 4 = 9  
i = 2 => j goes from 2 to 4 => sum = 9 + 3 = 12  
i = 3 => j goes from 3 to 4 => sum = 12 + 2 = 14  
i = 4 => j goes from 4 to 4 => sum = 14 + 1 = 15 

您的第二个代码段不能按原样编译。

修改

现在您的第二个代码段已编译:

for(int i = 0; i<5; i++)
    for(int j=i; j<5; j++);
        sum++;

相当于(这就是你应该总是使用大括号的原因):

for(int i = 0; i<5; i++) {
    for(int j=i; j<5; j++) {
    }
}
sum++;

这解释了为什么输出1。

答案 1 :(得分:0)

循环基本上是创建一个三角形数字,特别是第五个三角形数字,例如一些形式n + (n - 1) + ... + 2 + 1

诀窍以及 25 作为结果的原因是在第二个循环中:它只从当前<迭代< / em> i的值,最高为5

在内循环的每次迭代中,总和递增一次。由于循环技巧,内循环迭代5次,然后是4,依此类推:

first iteration of the outer loop: j = 0 to 4 -> 5 increments
second iteration of the outer loop: j = 1 to 4 -> 4 increments  
... 3 increments
... 2 increments
... 1 increment

5 + 4 + 3 + 2 + 1 = 15

答案 2 :(得分:0)

输出为15,因为在第一个循环的每次迭代中j被初始化为i的值。

如果j初始化为零,则输出为25。

答案 3 :(得分:0)

要获得25,而不是

    for(int j=i j<5; j++); // inner loop
        sum++;

使用

//......here
for(int j=0 j<5; j++); // inner loop
        sum++;

你现在在做什么 (1+1+1+1+1) + (1+1+1+1) + (1+1+1) + (1+1) + (1)而你想要的是(1+1+1+1+1).. 5 times

P.S。为什么第二个代码中的循环是for(int j=il j<5; j++); il未定义,即使您之前已在某处定义;,它也会停在il