Java 实例 – 打印平行四边形(实战总结)

Java 实例 – 打印平行四边形:从零开始掌握嵌套循环的精髓

在学习 Java 编程的初期,很多同学会遇到一个看似简单却容易卡壳的小任务:用代码打印出一个平行四边形。别小看这个练习,它不仅是对循环结构的实战检验,更是理解“嵌套循环”工作原理的绝佳入口。今天我们就来深入剖析这个经典的 Java 实例 – 打印平行四边形,手把手带你从零开始,写出清晰、可读、可复用的代码。

这个练习特别适合初学者和中级开发者。初学者能借此掌握 for 循环的基本语法和嵌套逻辑;中级开发者则可以借此优化代码结构,思考如何让程序更具扩展性。无论你是刚刚接触编程,还是正在复习基础,这篇文章都会让你对“打印图形”这件事有全新的理解。


什么是平行四边形?编程中的“形状”本质

在现实世界中,平行四边形是一个两组对边分别平行且相等的四边形。但在编程里,我们“打印”平行四边形,其实是用字符(如 *# 或空格)在控制台中构建出一个视觉上的图形。

想象一下:你有一张空白的纸,纸上有若干行,每行都有一定数量的字符。你要通过控制每行的空格数和星号数,让这些字符最终拼成一个倾斜的矩形,这就是我们所谓的“打印平行四边形”。

关键在于:每一行的开头都需要“缩进”一定的空格,然后才开始打印字符。这个“缩进”就是实现倾斜效果的核心。


分析图形结构:从直观到代码

我们先来画一个简单的平行四边形,比如高为 5 行,底边为 8 个星号:

    ******
   *******
  ********
 *********
**********

观察这个图形,你会发现:

  • 总共 5 行
  • 第 1 行有 6 个星号,前面有 4 个空格
  • 第 2 行有 7 个星号,前面有 3 个空格
  • 第 3 行有 8 个星号,前面有 2 个空格
  • 第 4 行有 9 个星号,前面有 1 个空格
  • 第 5 行有 10 个星号,前面有 0 个空格

规律显而易见:

  • 行号从 1 开始,每增加一行,星号数增加 1
  • 空格数从 n-1 开始,每行减少 1,其中 n 是总行数

这个规律就是我们写代码的“蓝图”。


代码实现:从基础版到可配置版

下面我们用 Java 实现这个功能。先看最基础的版本:

public class Parallelogram {
    public static void main(String[] args) {
        int height = 5;    // 平行四边形的高度(行数)
        int base = 8;      // 底边星号数量

        // 外层循环:控制行数
        for (int i = 0; i < height; i++) {
            // 内层循环 1:打印空格(缩进)
            for (int j = 0; j < height - 1 - i; j++) {
                System.out.print(" ");  // 打印一个空格
            }

            // 内层循环 2:打印星号
            for (int k = 0; k < base + i; k++) {
                System.out.print("*");  // 打印一个星号
            }

            // 每行结束后换行
            System.out.println();
        }
    }
}

代码详解:

  • height:定义图形的行数,即高度。
  • base:定义第一行星号的个数,后续每行加 1。
  • 外层循环 for (int i = 0; i < height; i++):控制打印多少行,从第 0 行到第 height-1 行。
  • 第一个内层循环:for (int j = 0; j < height - 1 - i; j++)
    • height - 1 - i 是当前行需要的空格数。例如第 0 行,空格数 = 5 - 1 - 0 = 4。
    • 每次打印一个空格,实现“缩进”。
  • 第二个内层循环:for (int k = 0; k < base + i; k++)
    • 星号数量从 base 开始,每行增加 1。
  • 最后 System.out.println():换行,确保下一行从新行开始。

这个版本已经能正确输出平行四边形,但还不够灵活。我们来做一个改进版,支持用户输入高度和底边。


改进版:支持用户输入的 Java 实例 – 打印平行四边形

import java.util.Scanner;

public class ParallelogramInput {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 提示用户输入高度和底边
        System.out.print("请输入平行四边形的高度:");
        int height = scanner.nextInt();

        System.out.print("请输入底边星号数量:");
        int base = scanner.nextInt();

        // 验证输入合法性
        if (height <= 0 || base <= 0) {
            System.out.println("高度和底边必须大于 0!");
            return;
        }

        // 开始打印图形
        for (int i = 0; i < height; i++) {
            // 打印空格:每行减少一个
            for (int j = 0; j < height - 1 - i; j++) {
                System.out.print(" ");  // 每个空格占一个字符位置
            }

            // 打印星号:每行增加一个
            for (int k = 0; k < base + i; k++) {
                System.out.print("*");
            }

            // 换行
            System.out.println();
        }

        scanner.close();  // 关闭 Scanner,避免资源泄漏
    }
}

关键优化点:

  • 使用 Scanner 类接收用户输入,提升交互性。
  • 增加输入合法性判断,防止用户输入负数或零。
  • 添加 scanner.close(),这是良好实践,防止内存泄漏。
  • 代码结构清晰,注释完整,便于后期维护。

可视化对比:不同参数下的效果

我们来测试几个不同的输入组合,观察输出变化:

高度 底边 输出效果
3 4 ```



| 4    | 3    | ```
   ***
  ****
 *****
******
``` |
| 6    | 5    | ```
     ****
    *****
   ******
  *******
 ********
*********
``` |

通过这些表格,你能更直观地理解:**高度决定行数,底边决定起始星号数,而空格数与行号呈负相关**。

---

## 拓展思考:如何打印倒置平行四边形?

如果你希望打印一个“倒过来”的平行四边形(即顶部宽,底部窄),只需调整循环顺序:

```java
// 倒置平行四边形:从高到低
for (int i = 0; i < height; i++) {
    // 空格数:从 0 开始,逐行增加
    for (int j = 0; j < i; j++) {
        System.out.print(" ");
    }

    // 星号数:从 base 开始,逐行减少
    for (int k = 0; k < base - i; k++) {
        System.out.print("*");
    }

    System.out.println();
}

你会发现,只需要把空格和星号的循环方向调换,就能实现倒置效果。这正是“循环逻辑”灵活运用的魅力所在。


常见问题与调试技巧

在实际编写过程中,初学者常遇到以下问题:

  1. 图形歪斜或不对齐
    检查空格是否打印正确,尤其是 height - 1 - i 是否计算准确。

  2. 星号数量不对
    确保 base + i 的逻辑无误,第 0 行应为 base,第 1 行为 base + 1

  3. 没有换行
    忘记 System.out.println() 会导致所有内容挤在一行。

  4. 输入非法值导致崩溃
    增加 if (height <= 0) 判断,避免程序异常退出。

建议:在调试时,先用小数据测试(如 height=3, base=3),观察输出是否符合预期,再逐步扩大。


总结:掌握 Java 实例 – 打印平行四边形的核心价值

通过今天的实战,我们不仅完成了“打印平行四边形”这个经典任务,更重要的是掌握了嵌套循环的使用逻辑:外层控制行,内层控制每行的字符构成

这个 Java 实例 – 打印平行四边形,看似简单,实则蕴含了编程中最核心的思维方式:将复杂问题分解为可重复的步骤。每一个空格、每一个星号,都是我们对程序逻辑的一次精确控制。

对初学者而言,它是练习循环、控制流程的绝佳入口;对中级开发者,它是优化代码结构、提升可读性的实战演练。

记住:编程不是背代码,而是理解“为什么”。当你能独立写出并修改这个图形程序时,你就已经迈出了坚实一步。

继续练习吧,下一个图形,可能是三角形、菱形,甚至是金字塔!你准备好了吗?