for循環打印金字塔

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();
            }



    }    
}

 

相關文章
相關標籤/搜索