黑马程序员技术交流社区

标题: [代码分享]打印任意大小的菱形 [打印本页]

作者: zx0210    时间: 2015-8-30 03:11
标题: [代码分享]打印任意大小的菱形
本帖最后由 zx0210 于 2015-8-30 03:14 编辑

前天晚上看到一个哥们分享的打印实心菱形的代码,便自己去搞了一套代码,除了可以打印出实心的菱形以外,还能打印出空心的菱形,并且菱形的行数可以改成任意你想要的大小,经过3个小时的努力,终于对这两个方法进行了封装和优化,有兴趣的同学可以试试其他的图形,我只是来抛砖引玉的,有什么比较好看的图形都可以拿来分享一下,不多说了,上代码!(电脑上没有eclips,只能用editplus编译了)
import java.util.Scanner;   //调用java的Scanner包
class PrintDiamond {
        public static void main(String[] args) {
                for (int x=0; x<100; x++) {   //这个循环只是用来多输入几次,多打印几个菱形
                        System.out.print("输入菱形的的大小(1-50的奇数):");  
                        Scanner sc = new Scanner(System.in);
                        int n = sc.nextInt();
                        Diamond.setDiamond(n);   //调用Diamond类
                        System.out.println();
              }
       }
}
public class Diamond {    //定义一个Diamond类
        private Diamond(){}    //让Diamond类无法被创建对象
        public static void setDiamond(int n) {
                if (n<=50) {    //我发现n的值大于50以后,DOS命令行里没法打印出一个菱形,因为太大了,所以判断一下
                        if (n%2==1) {      //经过多次证实,发现偶数行无法打印出一个完整的菱形
                               selectDiamond(n);     //满足条件后进入菱形形状选择方法
                        } else {
                               System.out.println("无法组成菱形");
                        }
               } else {
                        System.out.println("输入数值过大,DOS无法打印出完整菱形");
               }
        }
        private static void selectDiamond(int n){     //菱形形状选择程序
                System.out.print("请选择菱形的形状(实心:1,空心:2):");
                Scanner sc = new Scanner(System.in);
                int x = sc.nextInt();
                if (x==1) {
                        solidDiamond(n);       //输入1就调用实心菱形方法
                 } else if (x==2) {
                        emptyDiamond(n);     //输入2就调用空心菱形方法
                 } else {
                        System.out.println("输入不符合要求");
                }
        }
//代码的重要部分就在这后面了
        private static void solidDiamond(int n) {
                for (int x=0; x<n; x++) { //确定行数
                        if (x<=n/2) {
                                for (int y=x; y<n/2; y++) {
                                        System.out.print(" ");    //该循环能打印一个空的倒三角
                                }
                                for (int z=0; z<=x; z++) {
                                        System.out.print("*"+" ");   //接着上面的空三角形打印一个等腰三角形
                                }
                                System.out.println();
                        } else {
                                for (int y=0; y<x-n/2; y++) {
                                       System.out.print(" ");   //该循环能打印出一个空的正三角
                                }
                                for (int z=x; z<n; z++) {
                                        System.out.print("*"+" ");   //接着上面的空三角打印一个顶朝下的等腰三角,但是底比上一个等腰三角形少1
                                }
                                System.out.println();
                        }
                }
        }
        private static void emptyDiamond(int n) {    //构造一个可以打印出空心菱形的方法
                for (int x=n/2; x<n; x++){          //该段代码能打印出空心菱形的上半部分(包括短的对角线)
                        for (int y=1; y<=n; y++) {
                                if (y==(x+1)||y==(n-x)) {
                                        System.out.print("*");
                                }else {
                                        System.out.print(" ");
                                }
                        }
                        System.out.println();
                }
                        for (int x=0; x<n/2; x++) {    //该段代码能打印出空心菱形的下半部分
                                for (int y=1; y<=n; y++) {
                                        if (y==(n-x-1)||y==(x+2)) {
                                                System.out.print("*");
                                        }else {
                                                System.out.print(" ");
                                        }
                                }
                                System.out.println();
                         }
                }
        }
}

捕获.JPG (42.74 KB, 下载次数: 4)

捕获.JPG

作者: 迷途羔羊    时间: 2015-8-30 08:35
原来还有空菱形,学习了
作者: ksh    时间: 2015-8-30 11:33
其实是可以实现并排输出的,,2个普通外循环+每个外循环的内循环里用四个if语句,分别控制四个三角形输出,,,,代码会明晰很多
作者: zx0210    时间: 2015-9-5 00:48
本来想去研究圆形的,结果在editplus上画了好多次都没画出一个标准的圆形,所以果断放弃了
作者: 向上    时间: 2015-9-5 07:15
又学了一招
作者: xzl6313    时间: 2015-9-5 08:20
谢谢分享!!!!
作者: 寒星在天    时间: 2015-9-5 11:41
真正的大神深藏不露
作者: llwhcm    时间: 2015-9-5 18:30
研究研究

作者: fjb0902    时间: 2015-9-5 18:45
引申学习了,,怒赞
作者: 刘登飞    时间: 2015-9-5 21:30
很流弊  受教了   这个点感觉有点迷茫  这下可以好好练习下了
作者: 舒旺    时间: 2015-9-5 21:59
不错  赞一个
作者: zx0210    时间: 2015-9-8 11:36
纯原创,如有雷同,纯属巧合!
作者: kuikui    时间: 2015-9-8 11:45
赞一个,copy过去研究研究
作者: 一笑过千山    时间: 2015-9-8 21:04
看着好屌的样子,的确比我的菱形看着高大上

作者: 夕阳游子    时间: 2015-9-8 21:26
谢谢楼主了
作者: zx0210    时间: 2015-9-15 23:51
以后想做很炫的特效,但是看着这算法真的好难,并且还要不停的调试才能得到想要的效果,听说很多公司还专门雇佣了数学博士来计算算法,感觉有点心灰。。。。
作者: zzq18217362451    时间: 2015-9-15 23:55
这题困了我挺久的,好在弄明白了
作者: 哈哈我赢了    时间: 2015-9-16 22:57
顶一下。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2