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 }