1 //接收一个整数,表示层数(totallevel),打印出金字塔和一个空心金字塔,用for
2 //化繁为简
3 //(1)先打一个矩形来分析
4 /*(2)将每一层比下面缺少的用空格代替,每行个数是2 * level - 1,
5 每层前面要打的的空格数为totalLevel - level*/
6
7 public class test{
8 public static void main(String[] args){
9 int totalLevel = 8,level = 1 ;
10 for (int lineNum//每行个数;level <= totalLevel;level++){
11 /*如果在主方法全局定义或者在for循环括号里定义这个lineNum,并赋值2 * level - 1时,
12 在编译时直接解释为常量导致lineNum无法随level变化而变化,所以每次进入下一层都要赋一次值*/
13 lineNum = 2 * level - 1;
14 System.out.print("\n");
15 //一层打完,进入下一层
16
17
18 //输出某一层
19 //先打空格
20 for (int z = 1;z <= totalLevel - level;z++ )
21 System.out.print(" ");
22 //金字塔部分
23 for (int j = 1;j <= lineNum;j++)
24 System.out.print("*");
25 }
26
27 System.out.println("\n\n\n");
28
29
30 //空心金字塔
31 /*参考金字塔思路,空心金字塔其实就是每层打完前面的空格后,除了第一个还有第lineNum个,
32 其他都是空格就可以了,底座那一层最后单独输出*/
33
34 //先重置level
35 level = 1;
36 for (int lineNum;level <= totalLevel-1;level++){
37 /*如果在主方法全局定义或者在for循环括号里定义这个lineNum,并赋值2 * level - 1时,
38 在编译时直接解释为常量导致lineNum无法随level变化而变化,所以每次进入下一层都要赋一次值*/
39 lineNum = 2 * level - 1;
40 System.out.print("\n");
41 //一层打完,进入下一层
42
43
44 //输出某一层
45 //先打空格
46 for (int z = 1;z <= totalLevel - level;z++ )
47 System.out.print(" ");
48 //金字塔部分
49 for (int j = 1;j <= lineNum ;j++){
50 if (j == 1||j == lineNum)
51 System.out.print("*");
52 else System.out.print(" ");
53 }
54 }
55
56 //bottom
57 System.out.print("\n");
58 for (int sign = 1;sign <= 2 * level - 1;sign++)
59 System.out.print("*");
60 }
61 }