最近要参加面试,比较 之前翻译过一篇文章《通过回顾基础来加强你的编程技能》,自己也要巩固一下基础,也不至于面试这一关而无缘工作机会。
老师说过面试很有可能考打印空心菱形,考验你的逻辑和对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