巧用for循环绘制各种图形

矩形

如果要实现for循环绘制图形的话,双重for循环自然必不可少。
在我的上篇博客:《你真的懂for循环吗?》中介绍双重for循环时,已经将双重for循环的特点:“外层循环控制行,内层循环控制列” 解释的很清楚,并且就是用的矩形做例子,这里就不多加赘述。当然合理把控内层循环变量j和外层循环变量i之间的关系以便控制内层循环的次数,也是关键!

等腰三角形

正所谓不会写注释的程序猿不是一个合格的程序猿,解释都在注释里

代码如下:

/**
 * @author guqueyue
 * @Date 2020/3/4
 * 使用*号打印等腰三角形
 *     *
 *    ***
 *   *****
 *  *******
 * *********
 **/
public class For2 {
    public static void main(String[] args) {
        for(int i = 0; i < 5; i++) { // 5行,因此外层循环次数为5
            /**
             * i分别为:     0 1 2 3 4
             * 空格数分别为:4 3 2 1 0
             * i + j = 4 所以, j = 4 - i
             */
            for(int j = 0; j < 4 - i; j++){
                System.out.print(" ");
            }

            /**
             * i分别为:         0 1 2 3 4
             * 空格后*号数分别为:1 3 5 7 9
             * j = 2 * i + 1
             */
            for(int j = 0; j < 2 * i + 1; j++) {
                System.out.print("*");
            }

            // 输出一行后换行
            System.out.println();
        }
    }
}

Output:
在这里插入图片描述

直角三角形

如:

/**
 * @author guqueyue
 * @Date 2020/2/25
 * 使用*号打印直角三角形
 * 1 *
 * 2 **
 * 3 ***
 * 4 ****
 * 5 *****
 **/
public class For1 {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {         //外层for循环 i: 0 1 2 3 4
            for (int j = 0; j < i + 1; j++) { //内层for循环 j: 1 2 3 4 5 j = i+1
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

Output:
在这里插入图片描述

九九乘法表

直接开撸代码:

/**
 * @author guqueyue
 * @Date 2020/3/4
 * 绘制九九乘法口诀表
 * 1*1=1
 * 1*2=2 2*2=4
 * ...
 * 1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64
 * 1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
 **/
public class For3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            /**
             * i:   j:
             * 1    1
             * 2    1 2
             * ... ...
             * 8    1 2 3 4 5 6 7 8
             * 9    1 2 3 4 5 6 7 8 9
             * 所以, j <= i
             */
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i*j + "\t");
            }
            // 输出一行后换行
            System.out.println();
        }
    }
}

Output:
在这里插入图片描述

沙漏

此例和其他例子不同,在此例中,你需要根据条件判断临界情况并做两件事:
1.判断什么时候应该退出外层循环,彻底结束绘制。
2.判断什么时候到达临界点,开始反向绘制。

代码:

/**
 * @author guqueyue
 * @Date 2020/3/4
 * 编写一个方法,根据参数n,打印对应的图形:
 * n = 5时:
 * * * * * *
 *  * * * *
 *   * * *
 *    * *
 *     *
 *    * *
 *   * * *
 *  * * * *
 * * * * * *
 **/
public class For4 {
    public static void main(String[] args) {
        // 设置变量n
        int n = 5;
        // 定义输出的字符串
        String str = "* ";

        // 设置变量number: 表示这一行str的数量
        int number = n;
        // 设置变量space: 表示这一行开始空格的数量
        int space = 0;

        // 设置标记变量,用于控制方向:其中true表示str数递减,false表示str数递增
        boolean flag = true;

        // 循环输出每行,当str数目开始大于n时,循环结束
        for (;number <= n;) {
            // 输出space个空格
            for(int i = 0; i < space; i++) {
                System.out.print(" ");
            }

            // 输出number个字符串
            for(int i = 0; i < number; i++) {
                System.out.print(str);
            }

            if(number == 1) { // 到达临界点,调换方向
                flag = false;
            }

            if(flag){
                // 下一行空格要递增,str要递减
                space++;  // 空格数分别为: 0 1 2 3 4
                number--; //  str数分别为:5 4 3 2 1
            } else {
                // 当只输出一个str后,下一行空格数要递减,str数要递增
                space--;  // 空格数分别为: 3 2 1 0
                number++; // str数分别为: 2 3 4 5
            }

            // 输出一行后换行
            System.out.println();
        }
    }
}

Output:
在这里插入图片描述

发布了7 篇原创文章 · 获赞 34 · 访问量 2059

猜你喜欢

转载自blog.csdn.net/Qizhi_Hu/article/details/104654870