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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 羽狼之翼 中级黑马   /  2015-1-6 22:07  /  3052 人查看  /  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 个回复

正序浏览
最近还会打星嘛
回复 使用道具 举报
eli0827 发表于 2015-1-12 22:27
想看看菱形的思路和代码,自己下半部分整不出来!谢谢分享

随便看:lol
回复 使用道具 举报
想看看菱形的思路和代码,自己下半部分整不出来!谢谢分享
回复 使用道具 举报
星星大王 总结的不错!!!
回复 使用道具 举报
正在加油中,学而时习之,不亦说乎。。。。。。。
回复 使用道具 举报
厉害.......
回复 使用道具 举报
李一白_ 发表于 2015-1-7 22:47
我们班大神真多啊!!!!!!!!!!!!!!!!!!!!!!!!

:L我只是还不知道该做些什么比较好,就喜欢瞎搞一些东西。。。
回复 使用道具 举报
荭蕾 发表于 2015-1-7 22:45
晕了  学习java任重而道远啊

一起加油,美女!
回复 使用道具 举报

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

点评

别闹我是美女  发表于 2015-1-7 23:38
回复 使用道具 举报
我们班大神真多啊!!!!!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
晕了  学习java任重而道远啊
回复 使用道具 举报
探寻者 发表于 2015-1-7 22:21
正好复习一下,熟悉一下代码,谢谢楼主分享!!!

别客气。
回复 使用道具 举报
正好复习一下,熟悉一下代码,谢谢楼主分享!!!
回复 使用道具 举报
哎呦   不错哦
回复 使用道具 举报
iblackhorse 发表于 2015-1-7 21:39
今天才学你这么早都总结出来了啊,太棒了吧。

额。。。不是今天总结的呢,亲。
回复 使用道具 举报
今天才学你这么早都总结出来了啊,太棒了吧。
回复 使用道具 举报
学习要的就是这种精神,加油
回复 使用道具 举报
做过打印空心菱形的!
回复 使用道具 举报
  这真到位,先保存以后学完了,我也来回顾回顾。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马