for循环输出(倒)金字塔,(空心)菱形,(空心)沙漏

这篇博客介绍了如何利用for循环的嵌套来创建各种图形,包括金字塔、倒金字塔、空心金字塔、空心倒金字塔、实心菱形、实心沙漏、空心菱形和空心沙漏。通过调整空格和星号的输出,实现了这些图形的打印,展示了for循环在控制复杂图案输出时的灵活性。
摘要由CSDN通过智能技术生成

for循环的嵌套使用

下图中的图形题在考查循环知识点时中经常出现,在等级考试与公司面试时也出现过类似题目,实际目的在于掌握for循环的嵌套使用
在这里插入图片描述

1.金字塔

  1. 首先我们来思考一下金字塔是如何实现的,以五行的金字塔为例,
    1行是4个空格,1个*
    2行是3个空格,3个*
    3行是2个空格,5个*
    4行是1个空格,7个*
    5行是0个空格,9个*
  2. 可以看出行数与空格之间满足等差数列,行数与*之间也满足等差数,等差数列通项公式:y=x+(n-1)d;(y:空格数、*数;x:所在行数;n:总行数)
  3. 所以得出:空格与所在行数的等差关系为:y=5-x;*与所在行数的关系为y=2x-1.
  4. 代码如下:
//金字塔  
//空格:y=5-x;*:y=2x-1
for (int i = 1; i <= 5; i++) {//一共有五行,循环五次
        for (int j = 1; j <= 5 - i; j++) {//输出每行的空格数
            System.out.print(" ");
        }
        for (int k = 1; k <= 2 * i - 1; k++) {//输出每行的*号数
            System.out.print("*");
        }
        System.out.println("");//换行
    }
   		

2.倒金字塔

  1. 有了金字塔的练习,倒金字塔就很好理解了,一样的道理找到每行空格、*与行数的对应关系
  2. 代码如下 :
//倒金字塔 
//空格:y=x-1;*:y=11-2x
for (int i = 1; i<=5;i++)
     {
         for(int j =1; j<=i-1;j++)
         {
             System.out.print(" ");
         }
         for (int j =1; j<=11-2*i;j++)
         {
             System.out.print("*");
         }
         System.out.println();
     }

3.空心金字塔

  1. 空心金字塔就是将实心金字塔每行输出的*号改成每行只输出金字塔的边界,其余输出空格
  2. 代码如下:
//空心金字塔 
//空格:y=5-x;*:y=2x-1
for (int i = 1; i<=5;i++)//需要输出5行
     {
         for(int j =1; j<=5-i;j++)//输出每行的空格
         {
             System.out.print(" ");
         }
         for (int j =1; j<=2*i-1;j++)//输出每行的*号
         {
             if(i==5||j==1||j==2*i-1)//只需输出每行头尾的*号
             {
                 System.out.print("*");
             }
             else//其余也是输出空格
             {
                 System.out.print(" ");
             }
         }
         System.out.println();
     }

4.空心倒金字塔

  1. 同理,代码如下:
//空心倒金字塔 
//空格:y=x-1;*:y=11-2x
for (int i = 1; i<=5;i++)//需要输出5行
   {
       for(int j =1; j<=i-1;j++)
       {
           System.out.print(" ");
       }
       for (int j =1; j<=11-2*i;j++)//输出每行的*号
       {
           if(i==1||j==1||j==11-2*i)//只需输出每行头尾的*号
           {
               System.out.print("*");
           }
           else//其余也是输出空格
           {
               System.out.print(" ");
           }
       }
       System.out.println();
   }

5.实心菱形

  1. 前面我们写了实心(倒)金字塔,一种办法就是把两段代码拼起来,但是要注意的是,要考虑边界值(这种方法就不在细讲,直接贴代码);
  2. 代码如下:
//实心菱形
 for (int i = 1; i < 4; i++) {//金字塔,只输出4行
      for (int j = 1; j <= 4 - i; j++) {
          System.out.print(" ");
      }
      for (int k = 1; k <= 2 * i - 1; k++) {
          System.out.print("*");
      }
      System.out.println("");
  }

  for (int i = 1; i <= n; i++) {//倒金字塔,输出5行
      for (int j = 1; j <= i-1; j++) {
          System.out.print(" ");
      }
      for (int k = 1; k <= 11-(2 * i) ; k++) {
          System.out.print("*");
      }
      System.out.println("");
  }
  1. 下面讲另一种方法,我们注意到,菱形是一种对称图形,上半部分空格与*号与下半部分正好相对,所以,我们可以借助绝对值的知识对整个图形进行输出。
  2. 代码如下:
//实心菱形
for (int i = -4, L; i <= 4; i++) {//需要输出9行
       for (int j = 1; j <= Math.abs(i); j++) {//Math.abs(i)取i的绝对值,输出每行空格
            System.out.print(" ");
        }
        L = 9 - 2 * Math.abs(i);//通项公式+绝对值,推出整个菱形的*号输出规律
        for (int j = 1; j <= L; j++) {//输出每行*号
                System.out.print("*"); 
        }
        System.out.println();
      }

6.实心沙漏

  1. 有了上面的菱形对称图形的思想和绝对值概念的加入,沙漏图形也是一样的道理
  2. 代码如下:
//实心沙漏
for (int i = -4; i<=4;i++)//需要输出9行
  {
      for(int j =1; j<=4-Math.abs(i);j++)
      {
          System.out.print(" ");//输出每行空格
      }
      for (int j =1; j<=2*Math.abs(i)+1;j++)
      {
          System.out.print("*");//输出每行*号
      }
      System.out.println();
  }

7.空心菱形

  1. 空心菱形就是在实心菱形的基础上,控制对每行边界值的输出为*号即可;
  2. 代码如下:
//空心菱形
for (int i = -4, L; i <= 4; i++) {//需要输出9行
     for (int j = 1; j <= Math.abs(i); j++) {//输出每行空格
           System.out.print(" ");
       }
       L = 9 - 2 * Math.abs(i);
       for (int j = 1; j <= L; j++) {//输出每行*
           if (Math.abs(i) == 4 || j == 1 || j == L) {//只输出每行头尾的*号
               System.out.print("*");
           } else {//其余输出空格
               System.out.print(" ");
           }
       }
       System.out.println();
     }

8.空心沙漏

  1. 同理,代码如下:
//空心沙漏
for (int i = -4; i<=4;i++)//需要输出9行
   {
       for(int j =1; j<=4-Math.abs(i);j++)//输出每行空格
       {
           System.out.print(" ");
       }
       for (int j =1; j<=2*Math.abs(i)+1;j++)//输出每行*
       {
           if(i==-4||i==4||j==1||j==2*Math.abs(i)+1)//只输出每行头尾的*号
           {
               System.out.print("*");
           }
           else//其余输出空格
           {
               System.out.print(" ");
           }
       }
       System.out.println();
   }
  • 11
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值