Java 实例 – 打印矩形(长文讲解)

Java 实例 – 打印矩形:从零开始掌握循环与图形输出

在学习 Java 的初期,很多同学都会遇到一个经典的小练习——打印各种图形,比如三角形、菱形、矩形等。这些看似简单的任务,实则背后藏着循环控制、嵌套结构和逻辑思维的精髓。今天我们就来深入剖析一个基础但极其重要的 Java 实例:打印矩形。

这不仅是一道练习题,更是你理解循环嵌套、掌握打印逻辑的关键一步。如果你正在学习 Java,或者想巩固基础语法,那么这篇内容一定适合你。


什么是“打印矩形”?它在实际开发中有什么用?

“打印矩形”指的是在控制台输出一个由星号(*)或其他字符构成的矩形图案。比如:

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

这个图案有 4 行,每行 5 个星号。它的形状就像一个标准的矩形,四边垂直,上下左右对齐。

虽然这看起来只是一个“小作业”,但它的意义远不止于此。掌握这种打印逻辑,能帮助你:

  • 理解嵌套循环的执行流程
  • 提升对循环变量(i、j)的控制能力
  • 为后续学习更复杂的图形打印(如三角形、菱形)打下基础
  • 培养编程时的“空间感”与“逻辑拆解”能力

就像盖房子,地基打得牢,才能建高楼。打印矩形,就是你编程地基中的一块重要砖石。


如何用 Java 打印一个空心矩形?

我们先从最简单的开始:打印一个空心矩形。所谓“空心”,就是只有边框,内部是空的。

代码实现

public class PrintRectangle {
    public static void main(String[] args) {
        int rows = 5;   // 矩形的行数
        int cols = 7;   // 矩形的列数

        // 外层循环:控制行数
        for (int i = 1; i <= rows; i++) {
            // 内层循环:控制每行的列数
            for (int j = 1; j <= cols; j++) {
                // 判断是否为第一行、最后一行、第一列或最后一列
                if (i == 1 || i == rows || j == 1 || j == cols) {
                    System.out.print("*"); // 打印星号
                } else {
                    System.out.print(" "); // 打印空格(内部为空)
                }
            }
            System.out.println(); // 换行,开始下一行
        }
    }
}

代码详解

  • rows = 5:定义矩形有 5 行。
  • cols = 7:定义矩形有 7 列。
  • 外层 for 循环(i)控制行,从 1 到 5。
  • 内层 for 循环(j)控制列,从 1 到 7。
  • if (i == 1 || i == rows || j == 1 || j == cols):这是判断当前位置是否在矩形的“边框”上。
    • i == 1:第一行,必须打印星号。
    • i == rows:最后一行,也必须打印星号。
    • j == 1:第一列,必须打印星号。
    • j == cols:最后一列,必须打印星号。
  • 否则,打印一个空格,形成“空心”效果。
  • System.out.println():每行打印完后换行,否则所有字符会挤在一行。

运行结果

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

是不是很像一个矩形框?这就是空心矩形的实现方式。


如何打印一个实心矩形?

实心矩形就是每一格都填满星号,没有空心区域。

代码实现

public class PrintSolidRectangle {
    public static void main(String[] args) {
        int rows = 4;   // 行数
        int cols = 6;   // 列数

        // 外层循环:控制行
        for (int i = 1; i <= rows; i++) {
            // 内层循环:控制每行的列
            for (int j = 1; j <= cols; j++) {
                System.out.print("*"); // 每个位置都打印星号
            }
            System.out.println(); // 换行
        }
    }
}

代码说明

  • 这个版本没有 if 判断,直接在内层循环中打印 *
  • 无论位置在哪里,只要进入循环,就输出一个星号。
  • 所以每一行都由 6 个星号组成,共 4 行。

运行结果

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

是不是很直观?实心矩形的逻辑比空心简单得多,但却是理解“嵌套循环”的绝佳起点。


使用不同字符打印矩形:自定义外观

在实际项目中,我们很少只用星号。你可以用任意字符来打印矩形,比如 #@O 等。

示例:用 # 打印空心矩形

public class PrintCustomRectangle {
    public static void main(String[] args) {
        int rows = 6;
        int cols = 8;

        for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= cols; j++) {
                if (i == 1 || i == rows || j == 1 || j == cols) {
                    System.out.print("#"); // 使用 # 作为边框
                } else {
                    System.out.print(" "); // 内部为空格
                }
            }
            System.out.println();
        }
    }
}

运行结果

########
########

你甚至可以尝试用字母或数字,比如 O,来构建一个“字母矩形”:

if (i == 1 || i == rows || j == 1 || j == cols) {
    System.out.print("O");
} else {
    System.out.print(" ");
}

这样输出的图形会更有“设计感”。这也说明:编程不仅仅是写代码,更是表达创意。


如何让矩形的大小可变?从硬编码到参数化

上面的例子中,rowscols 都是写死的。但现实中,我们更希望用户输入尺寸。

使用 Scanner 实现用户输入

import java.util.Scanner;

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

        System.out.print("请输入矩形的行数:");
        int rows = sc.nextInt();

        System.out.print("请输入矩形的列数:");
        int cols = sc.nextInt();

        // 打印空心矩形
        for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= cols; j++) {
                if (i == 1 || i == rows || j == 1 || j == cols) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }

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

使用说明

  • import java.util.Scanner;:导入输入工具。
  • Scanner sc = new Scanner(System.in);:创建 Scanner 对象,用于读取用户输入。
  • sc.nextInt():读取整数输入。
  • sc.close():务必关闭 Scanner,防止内存泄漏。

运行示例

请输入矩形的行数:3
请输入矩形的列数:5
*****
*   *
*****

这样,你的程序就不再是“死代码”,而是可以动态响应用户输入的“活程序”。


深入理解嵌套循环:从“打印”到“思维训练”

很多人第一次看到嵌套循环时会懵,觉得“为什么里面还要一个循环?”。

我们可以用一个比喻来理解:

想象你正在布置一个展览厅,展厅是 4 行 × 6 列的网格。

  • 外层循环(i)代表你“一行一行”地走。
  • 内层循环(j)代表你在“这一行里,一个位置一个位置”地摆放展品。

每走完一行,你就换下一个位置,直到走完所有行。

所以,嵌套循环的本质就是:在一层逻辑中,重复执行另一层逻辑

当你能熟练控制这种“行”和“列”的关系,你就掌握了打印图形的核心逻辑。这不仅适用于矩形,也为后续学习三角形、菱形、金字塔等图形打下坚实基础。


总结:Java 实例 – 打印矩形 的价值

通过今天的学习,我们完成了几个关键目标:

  • 理解了如何用嵌套 for 循环控制二维输出
  • 掌握了实心与空心矩形的实现方式
  • 学会了使用用户输入来动态控制矩形大小
  • 理解了循环变量 ij 的作用与分工
  • 培养了“从图形到代码”的抽象思维能力

这些能力,正是每个 Java 开发者必须掌握的基础技能。别看“打印矩形”只是一个小程序,但它像一把钥匙,打开了你通往编程世界的大门。

无论你是初学者,还是想巩固基础的中级开发者,都可以反复练习这个实例。建议你尝试:

  • 打印不同大小的矩形
  • 使用不同字符(如 @+O)构造图形
  • 尝试打印多个矩形并排
  • if-else 判断条件,实现更复杂的图案

记住:编程不是“背代码”,而是“理解逻辑”。当你能独立写出一个“打印矩形”的程序时,你就已经走在了成长的路上。


最后提醒

在编写这类程序时,请务必注意:

  • 外层循环控制“行”,内层控制“列”
  • 每次内层循环结束后,必须换行(System.out.println()
  • 使用 Scanner 时,记得关闭输入流
  • 中英文、数字与符号之间加空格,如 Java 8System.out.println()

编程是一场持续练习的旅程。今天你写下的每一个 *,都是未来代码大厦的一块砖。坚持下去,你会看到自己的进步。

Java 实例 – 打印矩形,不只是一个练习,更是一次思维的淬炼。愿你在代码的世界里,越走越远。