Java 使用嵌套 for 循环打印皇冠
2021-06-22 11:04
标签:top 占位符 otto 嵌套 记录 部分 *** print rgs 打印结果如下图: Java 使用嵌套 for 循环打印皇冠 标签:top 占位符 otto 嵌套 记录 部分 *** print rgs 原文地址:https://www.cnblogs.com/qq641120784/p/9678506.html 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 )
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 )
75 {
76 //空格数A
77 for(int j = 1; j )
78 {
79 System.out.print(space);
80 }
81 //*数A
82 for(int j = 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 )
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 )
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 )
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 )
159 {
160 //空格数C
161 for(int j = 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 )
173 {
174 System.out.print(space);
175 }
176 System.out.println(); //换行
177 }
178 }
179 }
180 /*
181 总结:根据普通方式的输出,把王冠拆分冠顶和冠底两部分进行分析,找出空格和组成冠体星星之间的规律。
182 */