码迷,mamicode.com
首页 > 编程语言 > 详细

JavaSE之绘制菱形

时间:2017-12-11 14:02:08      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:port   输入流   水平   close   pos   logs   util   案例   ring   

在JavaSE的算法练习中,绘制菱形是一个比较常见的案例。菱形效果如下图所示:

技术分享图片

我们在解决算法问题时,通常情况下,先不要急于马上编码,而是要先观察,找出解决问题的关键所在。

在上图中,我们可以看到,菱形的行数与列数均可沿水平或垂直中轴线予以对折,故菱形的行数与列数均应为奇数;

菱形左上角的空格数量,从顶部之水平中轴线,依次递减,具体说来每行递减一个空格,直至水平中轴线处无空格;

菱形顶部与底部各有一个星号,顶部与底部之间的部分每行有两个星号,而且在菱形的上半部分,每行的星号为行起始处(角标为0),以及角标为该行的2倍数;

菱形的上半部分沿水平中轴线对折,即可得到菱形的下半部分,从而完成菱形的绘制。

我们在做完上述的算法分析后,接下来通过编码实现。详见下述代码:

import java.util.Scanner;
/**
* 绘制菱形
* @author 李章勇
*
*/
public class Demo {
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);//创建一个键盘输入对象
		System.out.println("请输入一个整数:");//提示输入
		int size=sc.nextInt();//输入一个整数,并赋值给size变量
		sc.close();//关闭输入流
		if(size%2==0){//判断若不为奇数,则将其加1变为奇数
			size+=1;
		}
		//绘制菱形的上半部分
		for(int i=0;i<=size/2;i++){
			for(int j=size/2;j>i;j--){//菱形的上半部分的左上角处空格绘制
				System.out.print(" ");
			}
			
			for(int j=0;j<=2*i;j++){//菱形中星号与空格的绘制
				if(j==0 || j==2*i){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();//绘制好一行就换行
			
		}
		//开始绘制菱形的下半部分
		int k=0;
		for(int i=size/2+1;i<size;i++){
			k+=2;//由于是沿水平中轴线对折,故菱形的下半部分中,紧邻菱形水平中轴线的行,相当于其上两行的菱形行的对折,以此类推
			for(int j=0;j<i-size/2;j++){
				System.out.print(" ");
			}
			for(int j=0;j<=2*(i-k);j++){
				if(j==0 || j==2*(i-k)){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}

运行上述代码,显示效果如下:

技术分享图片

 

JavaSE之绘制菱形

标签:port   输入流   水平   close   pos   logs   util   案例   ring   

原文地址:http://www.cnblogs.com/lizhangyong/p/8021932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!