暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Java笔记】绘制等边三角形图案

半猫Coder 2020-12-11
863

   绘制三角形图案,从本质上讲就是嵌套循环。可是如何通过控制嵌套的循环实现绘制各种三角形图案呢?

   在此记录下刚刚学习的要点,望以后也许会有需要的我看到时仍能搞清楚其中的逻辑。


一、绘制简易的右半个三角形




首先,三角形最简单的版本就是:


实现代码为:

    

public static void main(String[] args) {
        for(int x=1; x<=5; x++){
            for(int y=1; y<=x; y++){
                System.out.print("*");
            }
            System.out.println();
        }
}


分析逻辑:

   通过双层嵌套,两个循环,其中x变量控制打印行,y变量控制打印*号。

当x为1时,打印第一行,此时y能够达到的最大值为1,即一行打印一个*号。

当x为2时,打印第二行,此时y能够达到的最大值为2,即一行打印两个*号。

以此类推。

注意,控制x的行循环每次运行结尾时,都有一个换行输出操作,这样才能实现控制换行。


二、绘制倒三角形图案




打印如图所示的倒三角形并不是没有意义的,之后会用到。


实现倒三角形的代码为:

public static void main(String[] args) {
        for(int x=1; x<=5; x++){
            for(int y=5; y>=x; y--){
                System.out.print("*");
            }
            System.out.println();
        }
}

分析逻辑:

控制x变量的行循环没有变化,而控制y变量的循环,则是呈现递减操作。

当x为1时,打印第一行,此时y最大值为5,每循环一次递减1,直到y的值与x相等(为1),则总共打印了五个*号,即一行打印五个*号。

当x为2时,打印第二行,此时y最大值为5,每循环一次递减1,直到y的值与x相等(为2),则总共打印了四个*号,即一行打印四个*号。

以此类推。


三、绘制左半个三角形

此时开始逐步绘制目标三角形图案。




首先绘制左半个三角形。



实现代码为:

public static void main(String[] args) {
        for(int x=1; x<=5; x++){
            for(int y=5; y>=x; y--){
                System.out.print(" ");
            }
            for(int y=1; y<=x; y++){
                System.out.print("*");
            }
            System.out.println();
        }
}


分析逻辑

   可以观察到,左半个三角形图案由两个部分组成,一个是由空白字符组成的倒三角形(①部分),另一个是由*号组成的左半个三角形(②部分)。

   代码中,倒三角形部分没有太大变化,而第二个y变量就是控制打印*号的左半个三角形循环。

   而左半个三角形的循环控制,又与本文(一)中绘制右半个三角形的代码相同。

   显而易见,左半个三角形的形成,是由空白字符的倒三角形占位而使得*号位置偏移导致的。


四、绘制一个等边三角形




最后,终于来到我们的目标三角形了。


先看代码:


public static void main(String[] args){
        for(int x=1; x<=4; x++){
            for(int y=3; y>=x; y--){
                System.out.print(" ");
            }
            for(int y = 1; y<=x; y++){
                System.out.print("*");
            }
            for(int y = 1; y<x; y++){
                System.out.print("*");
            }
            System.out.println("");
        }
}





分析逻辑


   观察图案可得,等边三角形由两个部分组成,一个是本文(三)中的左半个三角形(①部分),另一个则是简易的右半个三角形(②部分)。

其中①部分与(三)相同,不再赘述。而②部分,则是将(一)的循环条件改为当y变量小于x时继续循环。

因此,当x为1时,②部分控制的y变量能够达到的最大值是1,可是此时不满足循环条件,因此跳过循环,故而实现首行不打印的效果(②部分在第一行没有打印*号)。

当x为2时,②部分控制的y变量能够达到的最大值仍是1,因此打印一个*号,即第二行打印一个*号(②部分在第二行打印了一个*号)。

以此类推。


五、总结

没啥好总结的,仔细看上面的推导过程吧。环环相扣,一步一步的就可以做到了。



文章转载自半猫Coder,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论