您的位置:首页 > 职场人生

面试基础题系列(一)java 打印 ,空心菱形

2013-10-18 20:38 609 查看
最近要参加面试,比较 之前翻译过一篇文章《通过回顾基础来加强你的编程技能》,自己也要巩固一下基础,也不至于面试这一关而无缘工作机会。

老师说过面试很有可能考打印空心菱形,考验你的逻辑和对for循环的理解,所以在网上搜索下,再加上自己的理解,就有了下面针对空心菱形的代码。大家多多交流,共同进步哈~


以层数5为例:

分析的思路为下图:



所以我们的目标就可以分解为两个部分:空格的数量和*的数量

打印部分也可以分为两部分:以菱形的中间部分为界线,上半部分和下半部分。

上半部分:

//空心菱形
	//Hollow diamond
	public static void hollowDiamond(){
		try{
		BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
		System.out.println("请输入菱形的层数(>=3的整数):");
		String hd=buf.readLine();
		int layer=Integer.parseInt(hd);
		//保证了菱形的特性,即层数为奇数
		//层数以5为例
		if(layer%2==0)
		{
			layer=layer-1;
		}
		for(int i=0;i<layer;i++){
			if(i<layer/2+1){
				//空格规律
				//1->3,2->2,3->1,4->0
				for(int k=0;k<layer/2+1-i;k++){
					System.out.print(" ");
				}
//打印*规律
//i的取值(0,1,2)
//j的取值,分别是i=0,i=1,i=2的时候
//  1
// 123
//12345
				for(int j=1;j<=(i+1)*2-1;j++){
					if(i==0){
					System.out.print("*");
					}else{
						if(j==1 || j==(i+1)*2-1){
							System.out.print("*");
						}else{
							System.out.print(" ");
						}
					}
				}
				
				System.out.println();

输出为:



下半部分:

}else{
				//下半部分菱形,和上面正好相反

//i的取值i=3,i=4
//3->2,4->3
				for(int k=0;k<=i-(layer-(layer/2+1));k++){
					System.out.print(" ");
				}
				for(int j=1;j<=(layer-i)*2-1;j++){
					if(i==layer-1){
					 System.out.print("*");
					}else{
						if(j==1 || j==(layer-i)*2-1){
							System.out.print("*");
						}else{
							System.out.print(" ");
						}
					}
				}
				
				System.out.println();
			}
		}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

输出为:



把两个部分放在一起就是下面的效果:



最后想看其他的菱形打印方法,可以点击下面的地址:http://hb0308513.iteye.com/blog/698114
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: