金字塔和空心金字塔

 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 }

 

上一篇:【连续签到领金币】解题思路总结


下一篇:day03 环境配置小插曲 javadoc命令使用