黑马程序员技术交流社区
标题:
[代码分享]打印任意大小的菱形
[打印本页]
作者:
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)
下载附件
2015-8-30 02:30 上传
作者:
迷途羔羊
时间:
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