繁体   English   中英

Java for循环很难理解

[英]Java for loop is hard to understand

有人可以向我解释为什么以下代码块会产生如此不同的输出吗?

public class hello 
{

    public static void main(String args[])
    {
        int a,b,c;
        for (a  = 0; a < 5; a++)
        {
            for (b = 4; b >= a; b--)
            {
                System.out.print(" ");
            }
            for (c = 0; c <= a - b; c++)
            {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出:

在此处输入图片说明

public class hello 
{

    public static void main(String args[])
    {
        int a,b,c;
        for (a  = 0; a < 5; a++)
        {
            for (b = 4; b >= 0; b--)
            {
                System.out.print(" ");
            }
            for (c = 0; c <= a - b; c++)
            {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出:

在此处输入图片说明

由于b> = a等于b> = 0,因为每个循环b的值都会减去1,所以输出是否应该相同?

变量a从0到4,因此对于每次迭代,您将具有:

for (b = 4; b >= 0; b--)
    { [...]

for (b = 4; b >= 1; b--)
    { [...]

for (b = 4; b >= 2; b--)
    { [...]

不,输出不能相同,因为每次执行时

for (a = 0; a < 5; a++)

这也被执行(5次)

for (b = 4; b >= a; b--)
    {
        System.out.print(" ");
    }

但是的值a与每次迭代改变: a将初始为0,则1,2,3和4最后。

因此,您在第一种情况下要打印的空格数将随着a每次迭代而减少。

对于a = 0我们有:b = 4,b = 3,b = 2,b = 1,b = 0( for loop停止,因为b = -1不是> = a = 0)

对于a = 1,我们有:b = 4,b = 3,b = 2,b = 1( for loop停止,因为b = 0不是> = a = 1)

对于a = 2,我们有:b = 4,b = 3,b = 2( for loop停止,因为b = 1不是> = a = 2)

对于a = 3,我们有:b = 4,b = 3( for loop停止,因为b = 2不是> = a = 3)

对于a = 4,我们有:b = 4( for loop停止,因为b = 3不是> = a = 4)

请阅读代码中的注释,您将有所不同!

    int a, b, c;
    for (a = 0; a < 5; a++)
    {
        for (b = 4; b >= a; b--) // Print every time b-a + 1 underscores... since you start every time with b=4 you have for each a one space fewer
        {
            System.out.print(" ");
        }

        for (c = 0; c <= a - b; c++) // and then print (a-b)-c +1 stars (b is every time a-1)... 
                                     // (first a=0 -b=-1)+1=2 and any time it will prit 2 stars scince
        {
            System.out.print("*");
        }
        System.out.println();
    }

    for (a = 0; a < 5; a++)
    {
        for (b = 4; b >= 0; b--) // Print every time b-a + 1=4 underscores
        {
            System.out.print(" ");
        }

        for (c = 0; c <= a - b; c++) // and then print (a-b)-c +1 stars (b is every time -1)... 
                                     // first time ( a=0 -b=-1)+1 =2 , second time (a=1 - b=-1)+1=3
        {
            System.out.print("*");
        }

        System.out.println();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM