看了韩顺平老师的课真是受益匪浅,其中蕴含的化繁为简,拆分问题的思想可以应对这个问题。
首先将问题简单化,先考虑一半的菱形,再打印出每一行的*,之后考虑前面的空格。这样先得到一个实心菱形,之后我们可以知道只需打印每一行的第一个*,与最后一个*,即可得到结果。
public static void main(String[] args) {
int layer = 5;
for(int i=1;i<=layer;i++){ //控制输出的层数,这里layer指的是一半菱形的层数
for(int j=1;j<=layer-i;j++){
System.out.print(" "); //控制上半部分该行空格的数量为layer-i
}for(int j=1;j<=2*i-1;j++){
if(j==1||j==2*i-1) //如果第一个或者是最后一个
{
System.out.print("*");
}else{
System.out.print(" ");
}
}System.out.println(); //换行
}
for(int i=1;i<=layer-1;i++){ //下半部分打印
for(int j=1;j<=i;j++){ //控制该行空格数量
System.out.print(" ");
}for(int j=1;j<=2*(layer-i)-1;j++){
if(j==1||j==2*(layer-i)-1){ //是第一个或者最后一个打印*
System.out.print("*");
}else {
System.out.print(" "); //中间位置为空格
}
}System.out.println(); //换行
}
}