思路1,runoob思路:
菱形为上下两个等腰三角形(用两个外层for循环分别代表上下两部分)
上部分为倒直角三角形 + 等腰三角形。外层for以要嵌套两个for循环分别打印出倒直角三角形(直角三角形打印空格)和等腰三角形
下部分为直角三角形和倒等腰三角形。外层for同样要嵌套两个for循环打印直角三角形(直角三角形打印空格)和倒的等腰三角形
public static void main(String[] args) {
//定义变量
int i,j,q;
//打印菱形的上半部分,左边打印倒直角三角形的空格,右边打印等腰三角形
for( i = 1;i < 6; i ++) //外循环控制行数,共打印五行
{
//左边打印倒直角三角形空格
for( j = 5; j > i; j--) //与外循环关联,初始值不变,表达式变化,控制打印的列数
{
System.out.print(" ");
}
//右边等腰三角形
for( q = 1;q < i*2; q++) //与外循环关联,初始值不变,表达式变化,打印奇数列1,3,5,7,9
{
System.out.print("*");
}
System.out.println(); //换行
}
//打印菱形的下半部分,左边为直角三角形的空格,右边为倒的等腰三角形
for(i = 1; i < 5; i++) //外循环控制行数,共打印四行
{
//左边直角三角形空格
for(j = 1;j <= i; j++) { //与外循环关联,初始值不变,表达式变化,共打印五行
System.out.print(" ");
}
//右边倒直角三角形
for( q = i*2; q < 9 ; q++) { //与外循环关联,初始值变化,表达式不变,打印奇数列7,5,3,1
System.out.print("*");
}
System.out.println(); //换行
}
}
思路2,逐行打印,用a控制菱形大小
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
System.out.println("请输入菱形宽度:");
int a=scanner.nextInt();
if(a%2==0) {
System.out.println("请输入奇数!");
}else {
for(int i=1;i<=(a+1)/2;i++) { //先打印上半部分,逐行打印
int x=(a+1-2*i)/2;
for(int j=1;j<=x;j++) {
System.out.print(" ");
} //左边的空格
for(int k=1;k<=2*i-1;k++) {
System.out.print("*"); //中间的星
}
for(int j=1;j<=x;j++) {
System.out.print(" ");//右边的空格
}
System.out.print("\n");//每一行打印完之后回车
}
for(int i=(a+1)/2-1;i>=1;i--) { //然后打印下半部分,逐行打印
int x=(a+1-2*i)/2;
for(int j=1;j<=x;j++) {
System.out.print(" ");
} //左边的空格
for(int k=1;k<=2*i-1;k++) {
System.out.print("*"); //中间的星
}
for(int j=1;j<=x;j++) {
System.out.print(" ");//右边的空格
}
System.out.print("\n");//每一行打印完之后回车
}
}
}