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

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

老师说过面试很有可能考打印空心菱形,考验你的逻辑和对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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值