绘制三角形图案,从本质上讲就是嵌套循环。可是如何通过控制嵌套的循环实现绘制各种三角形图案呢?
在此记录下刚刚学习的要点,望以后也许会有需要的我看到时仍能搞清楚其中的逻辑。
一、绘制简易的右半个三角形
![]() |
首先,三角形最简单的版本就是:
实现代码为:
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,因此打印一个*号,即第二行打印一个*号(②部分在第二行打印了一个*号)。
以此类推。
五、总结
没啥好总结的,仔细看上面的推导过程吧。环环相扣,一步一步的就可以做到了。








