Java打印边长为n的菱形图案
一. 具体分析
- 打印边长为n的菱形
- 计算打印菱形需要的图纸边长:长 l = 宽 w = 2 * n - 1
- 定义打印完整的菱形图案的【*】位置:长 i=[0,l] , 左边的位置left = |n-1 - i| , 右边的位置right = w-1- |n-1 - i|
二. 代码实现
public class DrawDiamond {
public static void main(String[] args) {
//打印菱形
drawDiamond(5);
//打印空心菱形
drawDiamondX(5);
}
static void drawDiamond(int n) {
int left = n - 1;
int l = 2 * n - 1, w = l;
for (int i = 0; i < l; i++) {
int right = w - 1 - Math.abs(left);
for (int j = 0; j < w; j++) {
if (Math.abs(left) <= j && j <= right) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
left--;
}
}
static void drawDiamondX(int n) {
int left = n - 1;
int l = 2 * n - 1, w = l;
for (int i = 0; i < l; i++) {
int right = w - 1 - Math.abs(left);
for (int j = 0; j < w; j++) {
if (j == Math.abs(left) || j == right) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
left--;
}
}
}
控制台输出:
*
***
*****
*******
*********
*******
*****
***
*
*
* *
* *
* *
* *
* *
* *
* *
*
三. 总结
开始最先想到图案的 长 l =
宽 w = 2 * n - 1
,然后根据图案左上半边规律发现 left = n-1-i
、 长度 i=[0,n]
,左下半边规律发现 left =|n-1-i |
、 长度 i=(n,l]
,最后右边为左边的镜像right = w-1- |n-1 - i|