多重循环实例:打印金字塔、空心菱形

使用for循环
接收一个整数以表示层数totalLevel,打印出金字塔。
思路:

  1. 打印一个矩形
public class Stars {
    public static void main(String[] args) {
        //先打印一个矩形
        /*
        *****
        *****
        *****
        *****
        *****
        */
        for (int i = 1; i < 5; i++) {
            System.out.println("*****");
        }
    }
}

2.打印半个金字塔

public class Stars {
    public static void main(String[] args) {
//        思路分析:
//        打印半个金字塔
//        *
//        **
//        ***
//        ****
//        *****
        for (int i = 1; i <= 5; i++) {//i表示层数
            //控制打印每层的*个数
            for (int j = 1; j <= i * 2 - 1; j++) {//此处i用来控制每一层*的个数
                System.out.print("*");
            }
            //每打印完一层的*后就换行
            System.out.println("");//学习到println本身就会换行输出。
//            System.out.print("\n");
        }
    }
}

多重循环实例:打印金字塔、空心菱形_第1张图片

3.打印整个金字塔

public class Stars {
    public static void main(String[] args) {
//        思路分析:
//        打印整个金字塔
//            *     1    2*层数-1   4空格数(总层数-1)
//           ***    3              3
//          *****   5              2
//         *******  7              1
//        ********* 9              0

        for (int i = 1; i <= 5; i++) {//i表示层数
            //在输出*之前还要输出对应空格(即总层数-当前层)
            //for (int k = 0; k < 5-i; k++) {
            for (int k = 1; k <= 5 - i; k++) {
                System.out.print(" ");//此处注意区别println是换行了,321行换下来
            }
            //控制打印每层的*个数
            for (int j = 1; j <= i * 2 - 1; j++) {//此处i用来控制每一层*的个数
                System.out.print("*");
            }
            //每打印完一层的*后就换行
            System.out.println("");//学习到println本身就会换行输出。
//            System.out.print("\n");
        }
    }
}

多重循环实例:打印金字塔、空心菱形_第2张图片
4.打印空心的金字塔

public class Stars {
    public static void main(String[] args) {
//        思路分析:
//        打印整个金字塔,当前行的第一和最后一个位置是*,末行全部输出。
//            *     1    2*层数-1   4空格数(总层数-1)
//           * *    2              3
//          *   *   2              2
//         *     *  2              1
//        ********* 9              0

        int totalLevel = 5; //层数设成变量
        for (int i = 1; i <= totalLevel; i++) {//i表示层数
            //在输出*之前还要输出对应空格(即总层数-当前层)
            //for (int k = 0; k < totalLevel - i; k++) {
            for (int k = 1; k <= totalLevel - i; k++) {
                System.out.print(" ");//此处注意区别println是换行了,321行换下来
            }
            //控制打印每层的*个数
            for (int j = 1; j <= i * 2 - 1; j++) {//此处i用来控制每一层*的个数
                //当前行的第一和最后一个位置是*,最后一层全部输出*
                if (j == 1 || j == 2 * i - 1 || i == totalLevel) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            //每打印完一层的*后就换行
            System.out.println("");//学习到println本身就会换行输出。
//            System.out.print("\n");
        }
    }
}

多重循环实例:打印金字塔、空心菱形_第3张图片
5.打印空心菱形

public class Stars {
    public static void main(String[] args) {
//        思路分析:
//        打印整个空心菱形,当前行的第一和最后一个位置是*
//            *     1    2*层数-1  4空格数
//           * *    2              3
//          *   *   2              2
//         *     *  2         4     1
//        *       * 9    9    5     0
//         *     *  2    7    6    1      每行总数 2[(totalLevel/2+1)*2-i]-1
//          *   *   2    5    7    2
//           * *    2    3    8    3
//            *     1    1    9    4  i-(totalLevel/2+1)
        int totalLevel = 5; //层数设成变量
        for (int i = 1; i <= totalLevel / 2 + 1; i++) {//i表示层数
            //在输出*之前还要输出对应空格(即总层数-当前层)
            for (int k = 1; k <= (totalLevel / 2 + 1) - i; k++) {
                System.out.print(" ");//此处注意区别println是换行了,321行换下来
            }
            //控制打印每层的*个数
            for (int j = 1; j <= i * 2 - 1; j++) {//此处i用来控制每一层*的个数
                //当前行的第一和最后一个位置是*,最后一层全部输出*
                if (j == 1 || j == 2 * i - 1) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            //每打印完一层的*后就换行
            System.out.println("");//学习到println本身就会换行输出。
//            System.out.print("\n");
        }

        for (int i = totalLevel / 2 + 2; i <= totalLevel; i++) {
            //空格
            //for (int k = 0; k < totalLevel - i; k++) {
            for (int k = 1; k <= i - (totalLevel / 2 + 1); k++) {
                System.out.print(" ");//此处注意区别println是换行了,321行换下来
            }
            //控制打印每层的*个数
            for (int j = 1; j <= 2 * ((totalLevel / 2 + 1) * 2 - i) - 1; j++) {//此处i用来控制每一层*的个数
                //当前行的第一和最后一个位置是*,最后一层全部输出*
                if (j == 1 || j == 2 * ((totalLevel / 2 + 1) * 2 - i) - 1) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            //每打印完一层的*后就换行
            System.out.println("");//学习到println本身就会换行输出。
//            System.out.print("\n");
        }
    }
}

多重循环实例:打印金字塔、空心菱形_第4张图片

你可能感兴趣的:(JAVA基础,java,算法,数据结构)