A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 羽狼之翼 中级黑马   /  2015-1-6 22:07  /  2968 人查看  /  23 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

周末的时候,在宿舍又熟悉了一下各种打星星的算法,我自己总结的,发个帖子,有想看的同学,可以当作茶余饭后的消遣,回忆回忆,代码挺简单的。

——————————————————————————————————————————————————————————————
/* * 打印实心菱形:
*  L0=7行                                     行数         星星数          空格数              星星数                                            空格数
*                       L        
*    *                  1        1        3        L*2-1                             (L0+1)/2-1
*   ***                 2        3        2        L*2-1                             (L0+1)/2-2
*  *****                3        5        1        L*2-1                             (L0+1)/2-3
* *******               4        7        0                上下公式皆可                        (L0+1)/2-4
*  *****                5        5        1        L0*2-((L*2)-1)      L-(L0+1)/2
*   ***                 6        3        2        L0*2-((L*2)-1)      L-(L0+1)/2
*    *                  7        1        3        L0*2-((L*2)-1)      L-(L0+1)/2
*
* 主要思路:1、当行数小于等于中间行数时,打印一个正三角形。
*                         2、当行数大于中间行数时,打印一个倒三角形。
*/

public class ShiXin_LingXing {

        public static void main(String[] args) {
               
                //行数必须为奇数
                shiXin_LingXing(7);
        }
       
        public static void shiXin_LingXing(int L0)
        {
                //外层循环控制行数L
                for(int L=1;L<L0+1;L++)
                {
                        //对行数进行判断,当小于等于(L0+1)/2时,打印上部
                        if(L<(L0+1)/2 || L==(L0+1)/2)
                        {
                        //以下是打印正等腰三角形的方法
                                //内层循环1控制打印空格个数
                                for(int space=0;space<(L0+1)/2-L;space++)
                                {
                                        System.out.print(" ");
                                }
                                //内层循环2控制打印星星个数
                                for(int x=0;x<(L*2-1);x++)
                                {
                                        System.out.print("*");
                                }
                                System.out.println();
                        }
                        //对行数进行判断,当大于(L0+1)/2时,打印下部
                        if(L>(L0+1)/2)
                        {
                                //内层循环1控制打印空格个数
                                for(int space=0;space<(L-(L0+1)/2);space++)
                                {
                                        System.out.print(" ");
                                }
                                //内层循环2控制打印星星个数
                                for(int x=0;x<(L0*2-(L*2-1));x++)
                                {
                                        System.out.print("*");
                                }
                                System.out.println();
                        }
                }
        }

}


——————————————————————————————————————————————————————————————
/*
* 打印三角形星星:
*  L0=5行            行数L 星星数     空格数          星星数                   空格数
*     *         1     1      4       L*2-1        L0-L
*    ***        2     3      3
*   *****       3     5      2
*  *******      4     7      1
* *********     5     9      0
*  L0=5行
* *********     1     9      0       L0*2-L-(L-1)     L-1
*  *******      2     7      1       L0*2-L*2+1
*   *****       3     5      2       L0*2-L-2
*    ***        4     3      3       L0*2-L-3
*     *         5     1      4       L0*2-L-4
*     
* 主要思路:1、寻找行数和星星数之间的规律。
*                         2、寻找行数和空格数之间的规律。
*                         3、用外层for循环控制整体行数,内层一个for循环控制打印的空格数。
*                         4、内层另外一个for循环控制打印的星星数。
*/


public class SanJiaoXing {

        public static void main(String[] args) {
                //调用函数,打印正等腰三角形,行数为打印5行
                sanJiaoXing1(5);
                System.out.println("--------------------");
                //调用函数,打印倒等腰三角形,行数为打印5行
                sanJiaoXing2(5);
               
        }
        //以下是打印正等腰三角形的方法
        public static void sanJiaoXing1(int L0)
        {
                //外层循环控制行数
                for(int L=1;L<L0+1;L++)
                {
                        //内层循环1控制打印空格个数
                        for(int space=0;space<L0-L;space++)
                        {
                                System.out.print(" ");
                        }
                        //内层循环2控制打印星星个数
                        for(int x=1;x<(L*2-1)+1;x++)
                        {
                                System.out.print("*");
                        }
                        System.out.println();
                }
        }
        //以下是打印倒等腰三角形的方法
        public static void sanJiaoXing2(int L0)
        {
                //外层循环控制行数
                for(int L=1;L<L0+1;L++)
                {
                        //内层循环1控制打印空格个数
                        for(int space=0;space<L-1;space++)
                        {
                                System.out.print(" ");
                        }
                        //内层循环2控制打印星星个数
                        for(int x=0;x<(L0*2-L*2+1);x++)
                        {
                                System.out.print("*");
                        }
                        System.out.println();
                }
        }

}



————————————————————————————————————————————————————————————

/*
* 打印空心菱形:
*                      行数              空格数                     星星数
*         L0=7行                        L     (L0+1)/2-L       L*2-1
*             *          1        3             1
*            * *         2        2             3
*           *   *        3        1             5
*          *     *       4        0             7
*           *   *        5     L-(L0+1)/2       L0*2-(L*2-1)
*            * *         6        2             3
*             *          7        3             1
* 主要思路:1、打印一个实心菱形(用到打印正三角形和倒三角形的方法)
*                         2、在实心菱形的基础上,判断打印的*是否为边缘的*,如果是边缘,就打印*
*                                 如果不是边缘,就打印" "空格,这样就把菱形中间掏空了。
*/

public class KongXin_LingXing {

        public static void main(String[] args) {
               
                //行数必须为奇数
                kongXin_LingXing(17);
        }

        public static void kongXin_LingXing(int L0)
        {
                //外层循环控制行数L
                for(int L=1;L<L0+1;L++)
                {
                        //对行数进行判断,当小于等于(L0+1)/2时,打印上部
                        if(L<(L0+1)/2 || L==(L0+1)/2)
                        {
                        //以下是打印正等腰三角形的方法
                                //内层循环1控制打印空格个数
                                for(int space=0;space<(L0+1)/2-L;space++)
                                {
                                        System.out.print(" ");
                                }
                                //内层循环2控制打印星星个数
                                for(int x=0;x<(L*2-1);x++)
                                {
                                        //判断是否需要打印*,当x处于第一个和最后一个位置时打印*
                                        if(x==0 || x==(L*2-1)-1)
                                                System.out.print("*");
                                        //否则打印空格
                                        else
                                                System.out.print(" ");
                                }
                                System.out.println();
                        }
                        //对行数进行判断,当大于(L0+1)/2时,打印下部
                        if(L>(L0+1)/2)
                        {
                                //内层循环1控制打印空格个数
                                for(int space=0;space<(L-(L0+1)/2);space++)
                                {
                                        System.out.print(" ");
                                }
                                //内层循环2控制打印星星个数
                                for(int x=0;x<(L0*2-(L*2-1));x++)
                                {
                                        //判断是否需要打印*,当x处于第一个和最后一个位置时打印*
                                        //为方便理解,这里不对公式进行简化合并处理。
                                        if(x==0 || x==(L0*2-(L*2-1))-1)
                                                System.out.print("*");
                                        //否则打印空格
                                        else
                                                System.out.print(" ");
                                }
                                System.out.println();
                        }
                }
        }
       
}


————————————————————————————————————————————————————————————

/*
* 打印矩形星星:
* *****
* *****
* *****
* *****
*
* 主要思路:方法1、for循环控制整体打印*个数,并在边缘处判断是否要打印换行。
*                         方法2、for循环嵌套,外层控制行数,内层控制列数。
*/


public class JuXing {

        public static void main(String[] args) {
               
                System.out.println("方法1:");
                //调用方法1,传入行数和列数。
                juXing1(4,5);
                System.out.println("------------------------");
                System.out.println("方法2:");
                //调用方法2,传入行数和列数。
                juXing2(4,5);
        }
       
        //num1代表行,num2代表列
        public static void juXing1(int num1,int num2)
        {
                //num代表要打印星星的总个数
                int num = num1*num2;
                //for循环遍历所有num数字,之所以x从1开始,是因为不能让当x=0时,x%num2==0成立
                for(int x=1; x<num+1; x++)
                {
                        if(x%num2==0)
                                //打印*并换行
                                System.out.println("*");
                        else
                                //打印*不换行
                                System.out.print("*");
                }
        }
        //num1代表行,num2代表列
        public static void juXing2(int num1,int num2)
        {
                //外层for循环控制行数
                for(int x=0;x<num1;x++)
                {
                        //内层for循环控制列数
                        for(int y=0;y<num2;y++)
                        {
                                System.out.print("*");
                        }
                        //每一行打印完后,打印一个换行
                        System.out.println();
                }
        }
}

————————————————————————————————————————————————————————————

好了,这次就和大家分享这些吧,谢谢大家!

23 个回复

倒序浏览
真强大,哦。
回复 使用道具 举报
不错,感谢分享啦,哈哈
回复 使用道具 举报
貌似这个数学也得学得好啊。。
回复 使用道具 举报
  这真到位,先保存以后学完了,我也来回顾回顾。
回复 使用道具 举报
做过打印空心菱形的!
回复 使用道具 举报
学习要的就是这种精神,加油
回复 使用道具 举报
今天才学你这么早都总结出来了啊,太棒了吧。
回复 使用道具 举报
iblackhorse 发表于 2015-1-7 21:39
今天才学你这么早都总结出来了啊,太棒了吧。

额。。。不是今天总结的呢,亲。
回复 使用道具 举报
哎呦   不错哦
回复 使用道具 举报
正好复习一下,熟悉一下代码,谢谢楼主分享!!!
回复 使用道具 举报
探寻者 发表于 2015-1-7 22:21
正好复习一下,熟悉一下代码,谢谢楼主分享!!!

别客气。
回复 使用道具 举报
晕了  学习java任重而道远啊
回复 使用道具 举报
我们班大神真多啊!!!!!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报

嗯哼,一起加油吧,帅哥!

点评

别闹我是美女  发表于 2015-1-7 23:38
回复 使用道具 举报
荭蕾 发表于 2015-1-7 22:45
晕了  学习java任重而道远啊

一起加油,美女!
回复 使用道具 举报
李一白_ 发表于 2015-1-7 22:47
我们班大神真多啊!!!!!!!!!!!!!!!!!!!!!!!!

:L我只是还不知道该做些什么比较好,就喜欢瞎搞一些东西。。。
回复 使用道具 举报
厉害.......
回复 使用道具 举报
正在加油中,学而时习之,不亦说乎。。。。。。。
回复 使用道具 举报
星星大王 总结的不错!!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马