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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zx0210 中级黑马   /  2015-8-30 03:11  /  1340 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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, 下载次数: 6)

捕获.JPG

17 个回复

正序浏览
顶一下。。。。。。。
回复 使用道具 举报
zzq18217362451 来自手机 中级黑马 2015-9-15 23:55:23
17#
这题困了我挺久的,好在弄明白了
回复 使用道具 举报
以后想做很炫的特效,但是看着这算法真的好难,并且还要不停的调试才能得到想要的效果,听说很多公司还专门雇佣了数学博士来计算算法,感觉有点心灰。。。。
回复 使用道具 举报
谢谢楼主了
回复 使用道具 举报
看着好屌的样子,的确比我的菱形看着高大上
回复 使用道具 举报
赞一个,copy过去研究研究
回复 使用道具 举报
zx0210 来自手机 中级黑马 2015-9-8 11:36:21
12#
纯原创,如有雷同,纯属巧合!
回复 使用道具 举报
不错  赞一个
回复 使用道具 举报
很流弊  受教了   这个点感觉有点迷茫  这下可以好好练习下了
回复 使用道具 举报
引申学习了,,怒赞
回复 使用道具 举报
研究研究
回复 使用道具 举报
真正的大神深藏不露
回复 使用道具 举报
xzl6313 来自手机 中级黑马 2015-9-5 08:20:19
地板
谢谢分享!!!!
回复 使用道具 举报
向上 来自手机 中级黑马 2015-9-5 07:15:50
报纸
又学了一招
回复 使用道具 举报
本来想去研究圆形的,结果在editplus上画了好多次都没画出一个标准的圆形,所以果断放弃了
回复 使用道具 举报
其实是可以实现并排输出的,,2个普通外循环+每个外循环的内循环里用四个if语句,分别控制四个三角形输出,,,,代码会明晰很多
回复 使用道具 举报
原来还有空菱形,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马