第一篇:打印空心菱形

import java.util.Scanner;

public class LianXi_01 {
    //给定任意层数,打印空心菱形金字塔
    /*分析:
若菱形有7层
      *
     * *
    *   *
   *     *
    *   *
     * *
      *
则最中间层数上面的每一层需要输出(总行数-当前行数-1)个空格【再-1是为了预防菱形层数为3时代码也能准确输出菱形】
最中间层数上面的每一层需要输出(当前行数*2-1)个*
最中间层数下面的每一层需要输出(当前行数-1-1)个空格【再-1是为了预防菱形层数为3时代码也能准确输出菱形】
第五层需要输出(当前行数-2*1)*2-1个*
第六层需要输出(当前行数-2*2)*2-1个*
第七层需要输出(当前行数-2*3)*2-1个*(只需输出1个*,写出来是为了方便找规律)
所以可以看出需要一个计数器count辅助输出菱形下半部分的代码
而空心菱形只需要输出每一层的第一个*和最后一个*(即当前行数*2-1),其余该输出的*换为输出空格
*/

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int cnt = 0;//计数器
        for(int i = 1; i <= n; i++){//i表示层数

            if(i > n/2+1){
                cnt++;
            }
            //输出上半部分
            if(i <= n/2+1){
                //最前面的输出空格
                for(int j = 1; j <= n-i-1; j++){
                    System.out.print(" ");
                }
                //输出每一行
                for(int k = 1; k <= 2*i-1; k++){
                    if(k == 1 || k == 2*i-1){
                        System.out.print("*");
                    }else {
                        System.out.print(" ");
                    }
                }
            //输出下半部分
            }else {
                //输出最前面空格
                for(int a = 1; a <= i-1-1; a++){
                    System.out.print(" ");
                }
                //输出每一层
                for(int b = 1; b <= (i-2*cnt)*2-1; b++){
                    if(b == 1 || b == (i-2*cnt)*2-1){
                        System.out.print("*");
                    }else {
                        System.out.print(" ");
                    }


                }
            }
            //每输出完一层就换行
            System.out.println();
        }

    }
}