1. 程式人生 > >Java 使用嵌套 for 循環打印皇冠

Java 使用嵌套 for 循環打印皇冠

根據 for 位數 ret 需求 次循環 pub else 保持

  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 */

打印結果如下圖:

技術分享圖片

Java 使用嵌套 for 循環打印皇冠