我想知道以下用于打印三角形的java代码到底发生了什么:

时间:2014-06-19 10:25:51

标签: java for-loop while-loop

代码1:我在第一个while循环之外声明了int b = 0

public class apples {
public static void main(String args[]){

    int a = 1;

    int b = 0;  

    while (a < 5){



            while(b < a){
            System.out.print("y");
            b++;
        }

        System.out.println();
        a++;
    }

}

}

结果:

y
y
y
y

代码2:这里我在第一个while循环中声明了int b = 0

public class apples {
public static void main(String args[]){

    int a = 1;

    while (a < 5){

        int b = 0;
            while(b < a){
            System.out.print("y");
            b++;
        }

        System.out.println();
        a++;
    }

}

}

结果:

y
yy
yyy
yyyy

正如你所看到的,当我在第一个while循环中和循环之外声明int b = 0时,我会得到不同的结果。 谁能解释为什么会这样? 谢谢!

4 个答案:

答案 0 :(得分:1)

当b在循环之外时,总会有一次打印,因为ab只被初始化一次,所以它的工作原理如下:

b=0 a=1 -> 1 iteration for b to be equal to a -> 1 print

b=1 a=2 -> 1 iteration for b to be equal to a -> 1 print and so on

在第二个循环中a以相同的方式增加,但b总是在循环中用0初始化,所以它会像这样工作:

b=0 a=1 -> 1 iteration for b to be equal to a -> one print 

b=0 a=2 -> 2 iterations for b to be equal to a -> two prints and so on.

答案 1 :(得分:1)

在第一种情况下,b最初为0,a为1,进入循环,打印一个y,然后b变为1,现在b不再大于1. 所以它继续递增和循环。现在b = 1,a = 2,再次进入内循环,再次打印y 因为1现在变为2,而2(b)不大于2(a)所以在,你每行只有1年

在第二种情况下,每次外循环迭代 b都会重新初始化为零。因此,每次打印更多'y'时。

见下面a,b的值,其中打印了'y'

案例1:

0,1
1,2
2,3
3,4
4,5

案例2:

0,1
0,2
1,2
0,3
1,3
2,3
0,4
1,4
.
.
.

答案 2 :(得分:1)

在这种情况下,足够System.out.println s永远不够,只需写下来就可以学到很多东西:

int a = 1;
int b = 0;

while (a < 5) {
    System.out.println("Outer loop: a="+a+", b="+b);
    while (b < a) {
        System.out.println("Inner loop: a="+a+", b="+b);
        b++;
    }

    System.out.println();
    a++;
}

使用它,更改初始值,在内循环之后/之前重置值,...这是学习内容的最佳方式。

答案 3 :(得分:0)

Imho,您在诊断和tracing代码方面遇到困难,这在编程方面有点重要。由于您的示例很容易手动跟踪(您应首先尝试,作为kajackx的答案),以获得更复杂的代码,您应该学习如何使用调试工具。假设您正在使用eclipse,请检查此link