我将通过7种典型金字塔案例为您解析for循环的图形绘制技巧,并提供完整的代码实现和输出示例。本文代码支持动态层数配置,所有示例以5层金字塔为基准。
一、基础实心金字塔(经典星号结构)
实现逻辑:通过双重循环控制行、空格与星号的递进关系
public static void solidPyramid(int layers) {
for (int i = 1; i <= layers; i++) {
// 空格递减逻辑
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
// 星号奇数列递增
for (int k = 1; k <= 2*i-1; k++) {
System.out.print("*");
}
System.out.println();
}
}
输出示例(layers=5):
*
***
*****
*******
*********
二、空心金字塔(边框模式)
特殊处理:仅首尾行和每行的首尾位置输出星号
public static void hollowPyramid(int layers) {
for (int i = 1; i <= layers; i++) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2*i-1; k++) {
// 边界条件判断
boolean isEdge = (k == 1 || k == 2*i-1 || i == layers);
System.out.print(isEdge ? "*" : " ");
}
System.out.println();
}
}
输出示例:
*
* *
* *
* *
*********
三、数字金字塔(对称数列)
创新点:数字对称分布+双向递增逻辑
public static void numericPyramid(int layers) {
for (int i = 1; i <= layers; i++) {
// 前导空格(双倍间距)
for (int j = 1; j <= 2*(layers - i); j++) {
System.out.print(" ");
}
// 左半递减数列
for (int k = i; k >= 1; k--) {
System.out.print(k + " ");
}
// 右半递增数列
for (int m = 2; m <= i; m++) {
System.out.print(m + " ");
}
System.out.println();
}
}
输出示例:
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
四、倒金字塔(逆向递减结构)
核心变化:外层循环采用逆序控制
public static void invertedPyramid(int layers) {
for (int i = layers; i >= 1; i--) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2*i-1; k++) {
System.out.print("*");
}
System.out.println();
}
}
输出示例:
*********
*******
*****
***
*
五、字母金字塔(ASCII码转换)
拓展应用:将数字转换为字母序列
public static void alphaPyramid(int layers) {
char start = 'A';
for (int i = 1; i <= layers; i++) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
// 字母递增输出
for (int k = 0; k < i; k++) {
System.out.print((char)(start + k));
}
// 字母递减输出
for (int m = i-2; m >= 0; m--) {
System.out.print((char)(start + m));
}
System.out.println();
}
}
输出示例:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
六、菱形金字塔(组合结构)
组合策略:正金字塔+倒金字塔(去重中间层)
public static void diamond(int layers) {
// 上半部分正金字塔
for (int i = 1; i <= layers; i++) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2*i-1; k++) {
System.out.print("*");
}
System.out.println();
}
// 下半部分倒金字塔(层数减1)
for (int i = layers-1; i >= 1; i--) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2*i-1; k++) {
System.out.print("*");
}
System.out.println();
}
}
输出示例:
*
***
*****
*******
*********
*******
*****
***
*
七、空心菱形(高级变体)
复合逻辑:空心条件判断+菱形结构
public static void hollowDiamond(int layers) {
// 上半部分
for (int i = 1; i <= layers; i++) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2*i-1; k++) {
boolean isEdge = (k == 1 || k == 2*i-1);
System.out.print(isEdge ? "*" : " ");
}
System.out.println();
}
// 下半部分
for (int i = layers-1; i >= 1; i--) {
for (int j = 1; j <= layers - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2*i-1; k++) {
boolean isEdge = (k == 1 || k == 2*i-1);
System.out.print(isEdge ? "*" : " ");
}
System.out.println();
}
}
输出示例:
*
* *
* *
* *
* *
* *
* *
* *
*
扩展技巧表
| 优化方向 | 实现方法 | 应用场景 |
|---|---|---|
| 动态层数控制 | 将固定数值改为方法参数 | 所有金字塔类型 |
| 输出效率优化 | 使用StringBuilder替代System.out | 大型金字塔(>50层) |
| 字符变换 | 修改输出字符的ASCII码计算方式 | 特殊符号金字塔 |
| 图形镜像 | 调整前导空格生成方向 | 右对齐金字塔 |
| 三维金字塔 | 增加z轴循环嵌套 | 立体图形绘制 |
通过修改上述代码中的循环条件和输出字符,可以衍生出20余种金字塔变体。
1万+

被折叠的 条评论
为什么被折叠?



