有趣的图形打印1

在进入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();

		}
	}
}


还有很多利用字符打印特定形状的小题目,将会在以后的文章中总结。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值