
本文详解如何通过修正空格控制逻辑,使用双重for循环在java中正确输出斜向菱形图案——关键在于让每行星号前的空格数随行号动态递减,而非固定不变。
要打印一个斜向菱形(Slanting Rhombus),其典型特征是:整体呈右上倾斜的平行四边形轮廓(非对称菱形),由 n 行组成,每行含 n 个 *,且第 i 行前需打印 n−i 个空格,使星号逐行左移,形成向右上方“倾斜”的视觉效果。
原始代码的问题在于空格循环写成了 j 每行都输出 n−1 个空格,所有 * 列严格对齐,最终呈现为垂直堆叠的矩形,而非斜向结构。
✅ 正确逻辑应为:
- 第 1 行(i = 1):n−1 个空格 → * 靠右
- 第 2 行(i = 2):n−2 个空格 → * 左移 1 位
- …
- 第 n 行(i = n):0 个空格 → * 顶格左对齐
以下是修复后的完整可运行代码:
立即学习“Java免费学习笔记(深入)”;
public class SlantingRhombus {
public static void rhombus(int n) {
for (int i = 1; i <= n; i++) {
// 打印前导空格:随行号增加而减少
for (int j = 1; j <= n - i; j++) {
System.out.print(" ");
}
// 打印 n 个星号
for (int j = 1; j <= n; j++) {
System.out.print("*");
}
System.out.println(); // 换行
}
}
public static void main(String[] args) {
rhombus(5);
}
}输出效果(n = 5):
***** ***** ***** ***** *****
? 关键注意点:
- 空格数量必须与 i 关联(即 n - i),不可硬编码为常量;
- 星号数量保持恒定(n 个),不随行变化,这是“斜向菱形”区别于传统上下对称菱形的核心特征;
- 若需扩展为完整菱形(含下半部分),需额外添加递减段(i 从 n−1 到 1),但本题仅要求单向斜向结构;
- 实际开发中建议将 System.out.print() 替换为字符串构建 + System.out.println(),提升性能与可测试性。
掌握这一空格动态计算思想,是理解图形类循环编程的基础,适用于三角形、梯形、锯齿阵列等多种模式生成场景。











