码迷,mamicode.com
首页 > 其他好文 > 详细

【趣题】用for循环输出菱形

时间:2018-05-23 13:45:54      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:lin   height   ima   sys   code   ace   做了   分享图片   col   

技术分享图片

用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

【趣题】用for循环输出菱形

标签:lin   height   ima   sys   code   ace   做了   分享图片   col   

原文地址:https://www.cnblogs.com/syxy/p/9072320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!