java基础——输出空心菱形

思路分析:

先打印一个实心菱形:共9层上方是5层的三角形,下方为4层的倒三角形
        
        上半部分 5层:
        打印每行 * 最前方对应的空格(层数 - i) 个
        打印每行的 *:(2 * i - 1)个

            *     //第 1 层 有 1 个*  2 * 1 - 1   有 4=(层数-1)个空格
           ***    //第 2 层 有 3 个*  2 * 2 - 1   有 3=(层数-2)个空格
          *****   //第 3 层 有 5 个*  2 * 3 - 1   有 2=(层数-3)个空格
         *******  //第 4 层 有 7 个*  2 * 4 - 1   有 1=(层数-4)个空格
        ********* //第 5 层 有 9 个*  2 * 5 - 1   有 0=(层数-5)个空格
        
        下半部分 4层:
        打印每行 * 前对应的空格 i 个
        打印每行的 *:2 * (4 - i) + 1个

         *******  //第 1 层 有 7 个*  2 *(4 - 1) + 1   有 1=(层数)个空格
          *****   //第 2 层 有 5 个*  2 *(4 - 2) + 1   有 2=(层数)个空格
           ***    //第 3 层 有 3 个*  2 *(4 - 3) + 1   有 3=(层数)个空格
            *     //第 4 层 有 1 个*  2 *(4 - 4) + 1   有 4=(层数)个空格

        打印空心的金字塔
        
        将每一行除了第一个位置和最后一个位置是 * 外,其他都输出为空格

            *     //第 1 层 有 1 个*  当前行的第一个位置是*,最后一个位置也是*
           * *    //第 2 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
          *   *   //第 3 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
         *     *  //第 4 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
        *       * //第 5 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
        
        当前行的第一个位置是*,最后一个位置( j == 1 && j == 2 *(4 - i) + 1 )也是*

         *     *  //第 1 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
          *   *   //第 2 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
           * *    //第 3 层 有 2 个*  当前行的第一个位置是*,最后一个位置也是*
            *     //第 4 层 有 1 个*  当前行的第一个位置是*,最后一个位置也是*

代码:

public class Lingxing{

	public static void main(String[] args){

		//菱形上半部分(前5行)
		for(int i = 1; i <= 5; i++){ //i 控制层数
			
			for(int j = 1; j <= 5 - i; j++){ // j 表示* 前每行空格数
				System.out.print(" ");
			}

			for(int k = 1; k <= 2 * i - 1; k++){ //k 表示每行 * 的个数
				if(k == 1 || k == 2 * i - 1){ //当前行的第一个位置是*,最后一个位置也是*
					System.out.print("*");
				}else{ //当前行其它位置为空格
					System.out.print(" ");
				}
			}
			//每打印完一层的式子后,换行 println 本身就会换行
			System.out.println(" ");
		}

		//菱形下半部分(后4行)
		for(int i = 1; i <= 4; i++){ //i 控制层数
			
			for(int j = 1; j <= i; j++){ // j 表示 * 前每行空格数
				System.out.print(" ");
			}

			for(int k = 1; k <= 2 *(4 - i) + 1; k++){ //k 表示每行 * 的个数
				if(k == 1 || k == 2 *(4 - i) + 1){ //当前行的第一个位置是*,最后一个位置也是*
					System.out.print("*");
				}else{ //当前行其它位置为空格
					System.out.print(" ");
				}
			}
			//每打印完一层的式子后,换行 println 本身就会换行
			System.out.println(" ");
		}
	}
}

运行结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值