Java 使用嵌套 for 循环打印皇冠

 

  1 //需求:打印王冠
  2 /**
  3     System.out.println("*          *          *");
  4     System.out.println(" ***      ***      *** ");
  5     System.out.println("  *****  *****  *****  ");
  6     System.out.println("   *****************   ");
  7     System.out.println("    ***************    ");
  8     System.out.println("     *************     ");
  9 
 10     分析:
 11         冠顶:  行数    空格数A        *数A      空格数B      *数A      空格数B       *数A    空格数A
 12                 1        0            1        10           1        10           1        0
 13                 2        1            3        6            3        6            3        1
 14                 3        2            5        2            5        2            5        2
 15               line      line-1    2*line-1  4*line-2     2*line-1  4*line-2   2*line-1  line-1
 16 
 17         冠底:  行数     空格数C        *数B        空格数C
 18                 4        3            17            3    
 19                 5        4            15            4
 20                 6        5            13            5
 21                 7        6            11            6    
 22                 8        7            9             7
 23                 9        8            7             8
 24                 10       9            5             9
 25                 11       10           3             10
 26                 12       11           1             11
 27                line     line-1     2*line-1       line-1
 28 */
 29 class ForCrown
 30 {
 31     public static void main(String[] args) 
 32     {
 33         //普通方式打印王冠
 34         System.out.println("*          *          *");
 35         System.out.println(" ***      ***      *** ");
 36         System.out.println("  *****  *****  *****  ");
 37         System.out.println("   *****************   ");
 38         System.out.println("    ***************    ");
 39         System.out.println("     *************     ");
 40 
 41         System.out.println("----------------------------------------------------------------------------");
 42         
 43         //优化方式打印王冠
 44 
 45         int topLine = 5; //打印行数*2(王冠高度)
 46         String space = " "; //空格,可改占位符
 47         String star = "■"; //星星,可改占位符
 48         String jewel = "◇"; //冠顶宝石,可改占位符
 49 
 50         crown(topLine, space, star, jewel); //调用打印冠顶方法
 51     }
 52     
 53     /**
 54         打印冠顶方法
 55 
 56         @param    topLine 打印行数,topLine * 2 = 王冠高度(topLine取值必须大于 1);
 57         @param    space 空格,可改占位符
 58         @param    star 星星,可改占位符
 59         @param    jewel 冠顶宝石,可改占位符
 60     */
 61     public static void crown(int topLine, String space, String star, String jewel)
 62     {
 63         
 64         if(topLine <= 1)
 65         {
 66             System.out.println("王冠规格必须大于 1");
 67             return;
 68         }
 69         int spLine = topLine; //记录 空格数B 打印行数
 70         int bottomLine = topLine * 2; //王冠总的行数,冠顶和冠底行数保持一致
 71         int count = 0; //累计冠顶最后一行,即冠底的上一行的星星之间的占位数。(冠顶最后一行星星之间的占位数减 2 可得冠底第一行的星星总数)
 72         
 73         //打印冠顶
 74         for(int i = 1; i <= topLine; i++)
 75         {
 76             //空格数A
 77             for(int j = 1; j <= i - 1; j++)
 78             {
 79                 System.out.print(space);
 80             }
 81             //*数A
 82             for(int j = 1; j <= 2 * i - 1; j++)
 83             {
 84                 if(i == 1)
 85                 {
 86                     System.out.print(jewel); //第一行打印冠顶宝石
 87                 }
 88                 else
 89                 {
 90                     System.out.print(star);
 91                     if(i == topLine)
 92                     {
 93                         count++;
 94                     }
 95                 }
 96             }
 97             //空格数B
 98             for(int j = 4 * spLine - 2; j >= 1; j--)
 99             {
100                 System.out.print(space);
101                 if(i == topLine)
102                 {
103                     count++;
104                 }
105             }
106             //*数A
107             for(int j = 1; j <= 2 * i - 1; j++)
108             {
109                 if(i == 1)
110                 {
111                     System.out.print(jewel); //第一行打印冠顶宝石
112                 }
113                 else
114                 {
115                     System.out.print(star);
116                     if(i == topLine)
117                     {
118                         count++;
119                     }
120                 }
121             }
122             //空格数B
123             for(int j = 4 * spLine - 2; j >= 1; j--)
124             {
125                 System.out.print(space);
126                 if(i == topLine)
127                 {
128                     count++;
129                 }
130             }
131             spLine--; //输出空格后,spLine自减,以减少 空格数B 下一次循环输出的空格
132             //*数A
133             for(int j = 1; j <= 2 * i - 1; j++)
134             {
135                 if(i == 1)
136                 {
137                     System.out.print(jewel); //第一行打印冠顶宝石
138                 }
139                 else
140                 {
141                     System.out.print(star);
142                     if(i == topLine)
143                     {
144                         count++;
145                     }
146                 }
147             }
148             //空格数A
149             for(int j = 1; j <= i - 1; j++)
150             {
151                 System.out.print(space);
152             }
153             System.out.println(); //换行
154         }
155         count -= 2; //累计的是冠顶最后一行的值,冠底第一行使用时,须自减2
156 
157         //打印冠底
158         for(int i = topLine + 1; i <= bottomLine; i++)
159         {
160             //空格数C
161             for(int j = 1; j <= i - 1; j++)
162             {
163                 System.out.print(space);
164             }
165             //*数B
166             for(int j = count ; j >= 1; j--)
167             {
168                 System.out.print(star);
169             }
170             count -= 2; //每打印一行减2
171             //空格数C
172             for(int j = 1; j <= i - 1; j++)
173             {
174                 System.out.print(space);
175             }
176             System.out.println(); //换行
177         }
178     }
179 }
180 /*
181     总结:根据普通方式的输出,把王冠拆分冠顶和冠底两部分进行分析,找出空格和组成冠体星星之间的规律。
182 */

打印结果如下图:

 

转载于:https://www.cnblogs.com/qq641120784/p/9678506.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值