请利用双重循环编程输出下面的图案(Java)

本文介绍了一种使用双重循环编程技巧输出特定对称星形图案的方法。通过对图案规律的分析,文章详细解释了如何计算每行的空格数和星星数,以及如何处理特殊行数情况。代码示例清晰地展示了如何实现这一图案的打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

请利用双重循环编程输出下面的图案:

      *
     * *
    * * *
  * * * * *
* * * * * * *
  * * * * *
    * * *
     * *
      *

分析

这种编程题一般分为两个部分:计算每行的空格数和星星数。

这里上下对称,所以可以分一半来实现,另一半就直接用就行了。

我们分析上一半:可以看到从第三行开始星星数是奇数的递增(3,5,7,……),空格数是偶数的递减(4,2,0,……),而第二行和第一行的星星数和空格数都比较突兀,星星数分别为(1,2),空格数为(6,5),而且其中的空格数还与最大行号n(就是星星数最多的行,这里的n为5)挂钩。

分析完规律后,由于当n==1和n==2时不适用咱们的规律,所以这里要把行数n==1和n==2这两个情况单独拎出来。

代码

package com.amiao.basicData;

public class PrintStar {
    public static void main(String[] args) {
        //n == 1 || n == 2单独领出来打印,n >= 3可以开始循环
        //rowCount为一半的行数(即为n)
        int rowCount = (int) (Math.random() * 10 + 1); //产生1~10的随机数,代表星星最多的行(n)
        if (rowCount == 1) {    //专门分开n==1和n==2的情况是因为不适用下面的公式
            System.out.println("*");
            System.out.println("*");
        } else if (rowCount == 2) {
            System.out.println(" *");
            System.out.println("* *");
            System.out.println(" *");
        } else {
            //打印上面一半
            for (int i = 1; i <= rowCount; i++) {
                printHalf(i, rowCount);
            }
            //打印下面一半
            for(int i = rowCount - 1; i >= 1; i--) {
                printHalf(i, rowCount);
            }
        }
    }

    //打印n>=3时的星星和空格
    private static void printHalf(int i, int rowCount) {
        if (i == 1) {
            for (int x = 1; x <= (rowCount - 2) * 2; x++) System.out.print(" ");
            System.out.println("*");
        } else if(i == 2) {
            for (int x = 1; x <= (rowCount - 3) * 2 + 1; x++) System.out.print(" ");
            System.out.println("* *");
        } else {
            for (int x = 1; x <= (rowCount - i) * 2; x++) System.out.print(" ");
            for (int y = 1; y <= (i * 2) - 3; y++) System.out.print("* ");
            System.out.println();
        }
    }
}

运行结果(可以多运行几遍)

              *
             * *
            * * * 
          * * * * * 
        * * * * * * * 
      * * * * * * * * * 
    * * * * * * * * * * * 
  * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * 
  * * * * * * * * * * * * * 
    * * * * * * * * * * * 
      * * * * * * * * * 
        * * * * * * * 
          * * * * * 
            * * * 
             * *
              *
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值