zoukankan      html  css  js  c++  java
  • 【趣题】用for循环输出菱形

    用for循环输出如上图所示的菱形

    思路:

    我们以17为例

    首先,输出一列九行的星号,这是最熟悉的逐行输出

    public class test{
        public static void main(String[] args) {
            int linesum = 17;//菱形的最大行数,输入一个    奇数
            
    
            for (int i=1; i<=linesum; i++){//i为当前所在行
                System.out.println("*");
            }
        }
    }     

    分析一下菱形

    红线以上的部分星号是递增的,红线以下的部分是递减的

    我们把菱形分成两个部分

    public class test{
        public static void main(String[] args) {
            int linesum = 17;//菱形的最大行数,输入一个    奇数
            int maxline = (linesum + 1) / 2;
            int minline = linesum - maxline;
    
            //上半部分-递增
            for (int i=1; i<=maxline; i++){//i为当前所在行
                System.out.println("*");
            }
    
            //下半部分-递减
            for (int i=1; i<=minline; i++){//i为当前所在行
                System.out.println("*");
            }
    
        }
    }     

     现在我们先考虑上半部分

    首先要解决的是缩进问题(这里可能用词不准确)

    可以看到

    第一行一共有16个空格

    第二行一共有14个空格

    由上到下每行的空格数为linesum(总行数)- 当前行数

    public class test{
        public static void main(String[] args) {
            int linesum = 17;//菱形的最大行数,输入一个    奇数
            int maxline = (linesum + 1) / 2;
            int minline = linesum - maxline;
    
            //上半部分-递增
            for (int i=1; i<=maxline; i++){//i为当前所在行
                for (int space=1; space <= (maxline-i); space++){
                    System.out.print("  ");//""号内为两个空格
                }
                System.out.println("*");
            }
    
            //下半部分-递减
            for (int i=1; i<=minline; i++){//i为当前所在行
                System.out.println("*");
            }
    
        }
    }   

    输出结果如下

    现在来把菱形的上半部分补好

    public class test{
        public static void main(String[] args) {
            int linesum = 99;//菱形的最大行数,输入一个奇数
            int maxline = (linesum + 1) / 2;
            int minline = linesum - maxline;
    
            //上半部分-递增
            for (int i=1; i<=maxline; i++){//i为当前所在行
                for (int space=1; space <= (maxline-i); space++){
                    System.out.print("  ");//""号内为两个空格
                }
                for (int star=1; star<=i+(i-1); star++){
                    System.out.print("* ");//""号内为*号加一个空格
                }
    
                System.out.println();//每次输出后换行
            }
    
            //下半部分-递减
            for (int i=1; i<=minline; i++){//i为当前所在行
                System.out.println("*");
            }
    
        }
    }   

    输出结果如下

    上半部分的就做好了

     下半部分的逆向思维吧...

    多做了个空心菱形

    public class test{
            public static void main(String[] args) {
                int linesum = 17;//菱形的最大行数,输入一个奇数
                int maxline = (linesum + 1) / 2;
                int minline = linesum - maxline;
    
                //上半部分-递增
                for (int i=1; i<=maxline; i++){//i为当前所在行
                    for (int space=1; space <= (maxline-i); space++){
                        System.out.print("  ");//""号内为两个空格
                    }
                    for (int star=1; star<=i+(i-1); star++){
                        if (star==i+(i-1)){
                            System.out.print("* ");
                        }
                        else if (star==1){
                            System.out.print("* ");
                        }
                        else{
                            System.out.print("  ");
                        }
                    }
    
                    System.out.println();//每次输出后换行
                }
    
                //下半部分-递减
                for (int i=minline; i>=1; i--){//i为当前所在行
                    for (int space=0; space<=(minline-i); space++){
                        System.out.print("  ");
                    }
                    for (int star=i+(i-1); star>=1; star--){
                        if (star==i+(i-1)){
                            System.out.print("* ");
                        }
                        else if (star==1){
                            System.out.print("* ");
                        }
                        else{
                            System.out.print("  ");
                        }
                    }
    
                    System.out.println();
                }
    
            }
        }   

    原理就是用if控制输出

                                                  水汐音

                                                2018-05-23

  • 相关阅读:
    PID算法控制直流电机笔记
    HAL库直流电机编码测速(L298N驱动)笔记
    HAl库控制L298N直流电机旋转笔记
    MQTT介绍与使用(转载)
    STM32中STD、HAL、LL库比较
    rpm检验是否被改动过
    find命令 参数
    会话管理测试时的注意点
    无权限修改用户组权限的状况一
    burpsuite + sqlmap 日志导出批量扫描
  • 原文地址:https://www.cnblogs.com/syxy/p/9072320.html
Copyright © 2011-2022 走看看