代码
/*
空心菱形 层数只能取奇数
*/
public class HollowDiamond {
/*
*
* *
* *
*******
思路分析
化繁为简
1. 先打印一个矩形
*****
*****
*****
*****
*****
2. 打印半个金字塔
* //第1层 有 1个*
** //第2层 有 2个*
*** //第3层 有 3个*
**** //第4层 有 4个*
***** //第5层 有 5个*
3. 打印整个金字塔
* //第1层 有 1个* 2 * 1 -1 有4=(总层数-1)个空格
*** //第2层 有 3个* 2 * 2 -1 有3=(总层数-2)个空格
***** //第3层 有 5个* 2 * 3 -1 有2=(总层数-3)个空格
******* //第4层 有 7个* 2 * 4 -1 有1=(总层数-4)个空格
********* //第5层 有 9个* 2 * 5 -1 有0=(总层数-5)个空格
4. 打印整个菱形
* //第1层 有 1个* 2 * 1 -1 有3=(总层数/2+1-1)个空格
*** //第2层 有 3个* 2 * 2 -1 有2=(总层数/2+1-2)个空格
***** //第3层 有 5个* 2 * 3 -1 有1=(总层数/2+1-3)个空格
******* //第4层 有 7个* 2 * 4 -1 有0=(总层数/2+1-4)个空格
***** //第5层 有 5个* 2 * (5/2-1) -1 有1=(5-总层数/2+1)个空格
*** //第6层 有 3个* 2 * (6/2-1) -1 有2=(6-总层数/2+1)个空格
* //第7层 有 1个* 2 * (7/2-1) -1 有3=(7-总层数/2+1)个空格
5. 打印空心菱形
* //第1层 有 1个* 当前行的第一个位置是*,最后一个位置也是*
* * //第2层 有 2个* 当前行的第一个位置是*,最后一个位置也是*
* * //第3层 有 2个* 当前行的第一个位置是*,最后一个位置也是*
* * //第4层 有 2个* 当前行的第一个位置是*,最后一个位置也是*
* * //第5层 有 2个* 当前行的第一个位置是*,最后一个位置也是*
* * //第6层 有 2个* 当前行的第一个位置是*,最后一个位置也是*
* //第7层 有 1个* 当前行的第一个位置是*,最后一个位置也是*
*/
public static void main(String[] args) {
// 定义菱形层数,层数只能取奇数,偶数层是没有菱形的
int num = 5;
for (int i = 1; i <= num; i++) {
//控制打印上半部分菱形每层的*个数
if (i <= num / 2 + 1) {
//在输出*之前,还有输出 对应空格 = 中间层-当前层
for (int h = 1; h <= num / 2 + 1 - i; h++) {
System.out.print(" ");
}
for (int j = 1; j <= 2 * i - 1; j++) {
//当前行的第一个位置是*,最后一个位置也是*
if (j == 1 || j == 2 * i - 1) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
}
//控制打印下半部分菱形每层的*个数
else {
//在输出*之前,还有输出 对应空格 = 当前层-中间层
for (int s = 1; s <= i - (num / 2 + 1); s++) {
System.out.print(" ");
}
for (int k = 1; k <= (2 * (num / 2 + 1) - i) * 2 - 1; k++) {
//当前行的第一个位置是*,最后一个位置也是*
if (k == 1 || k == (2 * (num / 2 + 1) - i) * 2 - 1) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
}
// 每打印完一层的*后,就换行 println本身会换行
System.out.println("");
}
}
}
附上效果图:
版权声明:本文为dcyjzsj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。