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

时间: 2024-10-22 11:46:11

Java 使用嵌套 for 循环打印皇冠的相关文章

Java学习之for循环打印菱形练习

for循环语句是Java程序设计中非常有用的循环语句.一个for循环可以用来重复执行某条语句,直到某个条件得到满足.在Java 5新增的加强的foreach语法,也非常有用. 1. for语句 for循环执行的次数是在执行前就确定的.语法格式如下: for(初始化; 布尔表达式; 更新) { //代码语句 } 关于 for 循环有以下几点说明: 最先执行初始化步骤.可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句. 然后,检测布尔表达式的值.如果为 true,循环体被执行.如果

python练习题:循环打印嵌套列表

好久没写博文了,添加一个练习题,选自<head_first_python>~~ python列表:以中括号开始和结束"[]":列表项以逗号","分隔开,使用赋值操作符"="赋予一个标识符.如: movies=["the holy",1975,"terry jones",91,["graham",["michael","john",&qu

&lt;09&gt; for循环的嵌套+for循环嵌套应用:打印图形+ 按要求打印图形+

for循环的嵌套: 1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 //打印出矩形的“*” 5 //控制打印了5行 6 //第一种理解方式:把打印一行的代码,执行了5次 7 for (int j=0; j<5; j++) { 8 //打印一行 * ,有5个 9 10 for(int i=0;i<5;i++){ 11 printf("*\t"); 12 } 13 printf

Java多线程循环打印ABC的5种实现方法

题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环打印2轮一.Synchronized同步法思路:使用synchronized.wait.notifyAll的方法利用线程标记变量控制三个线程的执行顺序. /** * @author XDarker * 2018-5-17 */public class Main { public static void main(String[] args) throws InterruptedException { int num = 1

使用for循环打印矩形和三角形、菱形、空心菱形

打印矩形 **************************************************************************************************** public class Demo3_712 { public static void main(String args[]){ for(int i=1;i<=10;i++){ //控制行 for(int j=1;j<=10;j++){ //控制列 System.out.print(&

java学习之for循环

学编程吧java学习之for循环发布了,大家可以通过xuebiancheng8.com来访问 for循环是循环结构的一种. for循环的语法是 for(初始化变量:条件:迭代操作){ 循环操作: } 下面看这里例子: for(int a = 10;a<20;a++){ System.out.println(a); } 上面这个例子中,a=10为初始化条件,最先执行,而且只会执行一次,然后判断条件a<20,条件为真,从控制台打印a的值,打印完后执行+1操作,然后再次判断a<20,如果为真再

Java从零开始学八(循环结构)

一.循环结构 循环结构则是根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落就称为循环主体. 二.While循环 while是循环语句,也是条件判断语句.当事先不知道循环该执行多少次的时,就要用到while循环.while循环的格式如下: while (循环条件判断){ 语句1 ; 语句2 ; … 语句n ; 循环条件更改 ; } 示例一.使用While进行100以内累加操作 package loop; public class test1 { public static void

java学习之while循环

前面分析了java的流程控制分为选择结构,循环结构,其中循环结构分为while,do...while和for循环 下面来分析下循环结构中的while循环 java中为什么要有while循环呢.先看一个例子 现在要执行一万次i++操作怎么办呢, 要没有循环操作,我们就得执行写一万行i++操作.这样就浪费了大量时间.这个时候就可以使用循环语句来实现,只要简单的几行代码即可. while(i<=10000){ System.out.println(i); i++; } 上面这个例子就是while循环,

优化java字符串连接与循环

最近在看公司项目的时候,发现前辈们写的代码很少用到字符串通过"+"号拼接,通过看源码发现package java.lang下有StringBuilder这么个类 StringBuilder用起来相当的方便,特别是在拼接SQL的时候看的一目了然. 网上也有说:消除字符串连接,在程序中优先考虑使用StringBuffer或者StringBuilder代替String.一个字符串相当于一个匿名的String对象,如果在程序中拼接两个字符串那么会在内存中定义三个字符串空间.而StringBuf