class Test { public static void main(String[] args) { //練習打印*組成的金子塔形 /* * *** ***** ******* */ //先分析:金子塔的數量爲:1->1 2->3 3->5 4->7 內層的*數是一個等差數列公式爲:an=a1+(i-1)*d 表示應該可以打印的*數 //先寫固定的層數:外層表示層數,內層表示打印的*數(寫死層數便於思考,之後只需修改層數就OK) int lay=4;//寫在外面方便控制層數的修改 for(int i=1;i<=lay;i++){ for(int j=1;j<=1+(i-1)*2;j++){ System.out.print("*"); } System.out.println();//沒打印完一層就換行 }
System.out.println("------------------------分割線------------------------------------------------"); //上述打印出來的其實已是一個完整的金字塔形了 不過只是缺乏空格 繼續加入空格 往右邊擠一下 /* * *** ***** ******* */ //空格的規律:1->3 2->2 3->1 4->0 呈現遞減效果 int lay1=10; for(int i=1;i<=lay1;i++){ for(int k=1;k<=lay1-i;k++){//打印的空格是跟隨層數的變化而變化的 System.out.print(" ");//打印空格 } for(int j=1;j<=1+(i-1)*2;j++){//打印的*呈現等差數列 System.out.print("*"); } System.out.println();//沒打完一層*就換行 } //在上面的基礎上打出一個鏤空的金子塔形 /* * * * * * ******* */ /*分析: 一、首先是在前面的基礎上的內層循環打*的部分 要作判斷 二、若是是第一層和最後一層則所有打出* 三、中間層判斷是打第一個*和最後一個* 其他的都打空格 ---若是去考慮空格會麻煩一些 */ System.out.println("------------------------分割線------------------------------------------------"); int lay3=4; for(int i=1;i<=lay3;i++){ for(int k=1;k<=lay3-i;k++){ System.out.print(" "); } for(int j=1;j<=1+(i-1)*2;j++){ if(i==1||i==lay3){//若是層數是第一層或者最後一層則 打出* System.out.print("*"); }
else{//中間層的狀況 繼續分類 if(j==1||j==1+(i-1)*2){//表示中間層的第一個*和最後一個* 應該要打印 System.out.print("*"); } else{ System.out.print(" ");//不然打印空格 } } } System.out.println();//內層循環打印*結束後換行 } } }
繼續在上面的基礎上進行 加工打印出一個鏤空的菱形測試
class Test { public static void main(String[] args) { //打印鏤空的菱形 /* * * * * * * * * * * * * */ //分析:鏤空的菱形由上三角和下三角組成 而且三角形式鏤空的 //根據前面打印的鏤空三角形的基礎上去組個---告訴咱們一個道理遇到稍微複雜的問題:應該善於拆解成一個一個的組件而後分別測試後進行組合 //先打印一個鏤空的三角形 /* * * * * * ******* */ int lay=4; for(int i=1;i<=lay;i++){//一、外層循環控制層數 for(int k=1;k<=lay-i;k++){//三、打印空格 System.out.print(" "); } for(int j=1;j<=1+(i-1)*2;j++){//二、利用等差數列的原理,an=a1+(n-1)*d 每次等打印最多的*就是an項的值 if(i==1){//四、首層打*最後一層不打* System.out.print("*"); } else{ if(j==1||j==1+(i-1)*2){//五、中間層有*的部分是第一個和最後一個 System.out.print("*"); } else{ System.out.print(" ");//六、中間層其他部分全是空格 } } } System.out.println(); } //System.out.println("------------------------分割線------------------------------------------------"); //上面的部分打印好了 繼續打印下面的部分 /* ******* * * * * * */ //慣例:先打印出實心的三角形 /* ******* ***** *** * */ //分析:1->7 2->5 3-3 4->1 int lay1=4; for(int i=lay1;i>=1;i--){//第一層其實是最後一次 因此反轉 for(int k=0;k<lay1-i;k++){//層數和空格對應關係的變化:4->0 3->1 2->2 1->3 System.out.print(" "); } for(int j=2*i-1;j>=1;j--){//第一層的*數 創建和層數的關係 if(i==1){//只有最後一層纔打1個* System.out.print("*"); } else{ if(j==2*i-1||j==1){ System.out.print("*"); } else{ System.out.print(" "); } } } System.out.println(); } } }