在进入Java初级班的时候,老师介绍完java基本的程序结构以及流程控制语句就会给一些练习题,其中就有一种打印图形的程序设计题,这些题重要的不是语法(虽然说是用来练习基础语法的),重要的是解题思路。
第一道题:打印一个直角三角形,三角形的行数由传入的参数来决定,即:如果传入参数为“5”,则一共打印5行,第一行打印1个“*”,第二行打印两个“*”,直到第5行打印5个“*”之后结束,打印后的图形如下所示:
*
* *
* * *
* * * *
* * * * *
这道题的基本思路是:通过两层循环语句来控制图形的打印,其中第一层来控制行号,第二层来控制打印字符“*”,最终达成打印一个直角三角形的目的。
具体的实现代码如下:
class Solution{ /** * 打印直角三角形 * @param rowsNum:要打印直角三角形的行数 */ public static void printRightAngledTriangle(int rowsNum){ //创建两层循环,第一层循环是控制行号,第二层循环来控制打印“*” for(int i = 1;i <= rowsNum;i++){ for(int j = 1;j <= i;j++){ System.out.print("*\t");//在对应行号打印对应个数的“*” } System.out.println();//在本行打印完成之后,进行换行操作 } } }
第二道题:打印直角边在右边的直角三角形,而其中每行的“*”个数还是与本行相同,只不过在本行“*”的左边填上适当个数的空格,具体的图像如下图所示:
*
* *
* * *
* * * *
* * * * *
这道题的大体思路:在第一道题的基础上,直接加在每行上加上对应个数的空格,空格的个数在本题中个数为:rowsNum-行号,在第一道题的基础上加上一个打印空格的循环即可;
具体的代码实现如下:
class Solution{ public static void printRightAngledTriangle2(int rowsNum) { // 创建两层循环,第一层循环是控制行号,第二层循环来控制打印“空格”和“*” for (int i = 1; i <= rowsNum; i++) { // 用来打印对应行号个数的"空格" for(int j = rowsNum-i; j>0;j--){ System.out.print(" "); } // 用来打印"*" for (int j = 1; j <= i; j++) { System.out.print("* ");// 在对应行号打印对应个数的“*” } System.out.println();// 在本行打印完成之后,进行换行操作 } } }
第三道题:打印空心三角形:在以上题目的基础上,添加一个边缘检测,仅仅打印处在边缘的元素,具体的呈现效果:
*
* *
* *
* *
* * * * *
最终效果主要是将外围的字符保留,将内部的字符隐藏;
大体思路:具体的打印流程是和上面两道题一样的,只是在打印的时候添加了一个边缘检测,即当行==1、n或者打印每行的第一个字符以及最后一个字符时,打印具体字符,否则打印空格“\t”;
具体的代码实现:
class Solution{ /** * 打印只有边缘的空心直角三角形,使用指定的字符 * @param c:指定用于生成三角形的字符 * @param lineNum:三角形的高度 */ public static void printEmptyRightAngledTriangle(char c, int lineNum) { for (int i = 1; i <= lineNum; i++) { for (int j = 1; j <= i; j++) { if (j == 1 || j == i || i == lineNum) { System.out.print(c + "\t"); } else { System.out.print("\t"); } } System.out.println(); } } }
还有很多利用字符打印特定形状的小题目,将会在以后的文章中总结。