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();//没打完一层*就换行 } //在上面的基础上打出一个镂空的金子塔形 /* * * * * * ******* */ /*分析: 1、首先是在前面的基础上的内层循环打*的部分 要做判断 2、如果是第一层和最后一层则全部打出* 3、中间层判断是打第一个*和最后一个* 其余的都打空格 ---如果去考虑空格会麻烦一些 */ 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++){//1、外层循环控制层数
                
            for(int k=1;k<=lay-i;k++){//3、打印空格
                System.out.print(" ");
            }
            for(int j=1;j<=1+(i-1)*2;j++){//2、利用等差数列的原理,an=a1+(n-1)*d 每次等打印最多的*就是an项的值
                if(i==1){//4、首层打*最后一层不打*
                    System.out.print("*");    
                }
                else{
                    if(j==1||j==1+(i-1)*2){//5、中间层有*的部分是第一个和最后一个
                        System.out.print("*");
                    }
                    else{
                        System.out.print(" ");//6、中间层其余部分全是空格
                    }
                }        
            }
            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();
            }



    }    
}

 

posted @ 2018-01-05 16:03  一夜醉清风  阅读(18281)  评论(0编辑  收藏  举报