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

我想知道以下打印三角形的java代码中到底发生了什么:,java,for-loop,while-loop,Java,For Loop,While Loop,代码1:我在第一个while循环之外声明了intb=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++; }

代码1:我在第一个while循环之外声明了
intb=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++;
    }

}
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++;
    }

}
代码2:这里我在第一个while循环中声明了intb=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++;
    }

}
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++;
    }

}
如您所见,当我在第一个while'循环内部和该循环外部声明
intb=0
时,我得到了不同的结果。 有人能解释为什么会这样吗?
已经谢谢你了

当b在循环之外时,将始终有一个打印,因为
a
b
都只初始化一次,所以它的工作原理如下:

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.

当b在循环之外时,将始终有一个打印,因为
a
b
都只初始化一次,所以它的工作原理如下:

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.

当b在循环之外时,将始终有一个打印,因为
a
b
都只初始化一次,所以它的工作原理如下:

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.

当b在循环之外时,将始终有一个打印,因为
a
b
都只初始化一次,所以它的工作原理如下:

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.

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

在第二种情况下,每次外部循环迭代时,b都被重新初始化为零。所以每次它都印上更多的“y”

请参见下面打印“y”的a、b值

案例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
.
.
.

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

在第二种情况下,每次外部循环迭代时,b都被重新初始化为零。所以每次它都印上更多的“y”

请参见下面打印“y”的a、b值

案例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
.
.
.

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

在第二种情况下,每次外部循环迭代时,b都被重新初始化为零。所以每次它都印上更多的“y”

请参见下面打印“y”的a、b值

案例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
.
.
.

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

在第二种情况下,每次外部循环迭代时,b都被重新初始化为零。所以每次它都印上更多的“y”

请参见下面打印“y”的a、b值

案例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
.
.
.

在这种情况下,足够的
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++;
}
inta=1;
int b=0;
while(a<5){
System.out.println(“外循环:a=“+a+”,b=“+b”);
while(b

使用它,更改初始值,在内部循环之后/之前重置值。。。这是学习东西的最好方法。

在这种情况下,足够的
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++;
}
inta=1;
int b=0;
while(a<5){
System.out.println(“外循环:a=“+a+”,b=“+b”);
while(b

使用它,更改初始值,在内部循环之后/之前重置值。。。这是学习东西的最好方法。

在这种情况下,足够的
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++;
}
inta=1;
int b=0;
while(a<5){
System.out.println(“外循环:a=“+a+”,b=“+b”);
while(b

使用它,更改初始值,在内部循环之后/之前重置值。。。这是学习东西的最好方法。

在这种情况下,足够的
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++;
}
inta=1;
int b=0;
while(a<5){
System.out.println(“外循环:a=“+a+”,b=“+b”);
while(b

使用它,更改初始值,在内部循环之后/之前重置值。。。这是学习东西的最好方法。

嗯,你在诊断和编写代码方面有困难,这在编程中是一个至关重要的方面。因为你的例子很简单