代码
/*
空心菱形 层数只能取奇数
*/
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("");}}
}
附上效果图: