import java.util.Scanner;//召唤大神。。。
class Demo
{
public static void main(String[] args)
{
System.out.print("输入边长=");
Scanner in = new Scanner(System.in);// 新建一个大神。。
int num = in.nextInt();// 存到了 num 中
int n = num/2;//
for (int x = 1; x<= 2*n+1; x++) {//必须得是奇数行才行。。。。。
System.out.print("* ");
}
for (int x = 1; x <= n; x++) {//
System.out.print("\n");
for (int y = x; y <= n ; y++) {//自减
System.out.print("* ");
}
for (int y = 1;y <= 2*x-1 ; y++) {//中间的菱形空格
System.out.print(" ");
}
for (int y = x; y <= n ; y++) {//自减
System.out.print("* ");
}
}
//下面的
for (int x = 1; x <= n-1; x++) {
System.out.print("\n");
for (int y = 1; y <=x+1 ; y++) {//自增 +1 是为了 第一行输出2次
System.out.print("* ");
}
for (int y = 2*n -3;y >= 2*x-1; y--) {
System.out.print(" ");
}
for (int y = 1; y <= x+1 ; y++) {//同上
System.out.print("* ");
}
}
System.out.print("\n");
for (int x = 1; x<= 2*n+1; x++) {
System.out.print("* ");
}
}
} 作者: 黑马-王宁 时间: 2012-11-27 13:14
思路:
设座标原点为 0,0
设菱长为 len
则纵轴横座标也是 len
则最大横座标及总行数都是len*2
那第i行的第一个实心点 x的横座标是 len-i的绝对值(len指纵轴横座标)
则第i行的第二个实心点 y 的横座标是 len+(len-x) (len同上,x指x点的横座标)
循环判断第i行的每一个点是不是 x 或 y点,如果是,则输出 * ,否则输出汉字空格。
注意 len 为两个 * 之间的距离,所以三个* 是两个长度