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(" ");
}
这样输出的图形会更有“设计感”。这也说明:编程不仅仅是写代码,更是表达创意。
如何让矩形的大小可变?从硬编码到参数化
上面的例子中,rows 和 cols 都是写死的。但现实中,我们更希望用户输入尺寸。
使用 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循环控制二维输出 - 掌握了实心与空心矩形的实现方式
- 学会了使用用户输入来动态控制矩形大小
- 理解了循环变量
i和j的作用与分工 - 培养了“从图形到代码”的抽象思维能力
这些能力,正是每个 Java 开发者必须掌握的基础技能。别看“打印矩形”只是一个小程序,但它像一把钥匙,打开了你通往编程世界的大门。
无论你是初学者,还是想巩固基础的中级开发者,都可以反复练习这个实例。建议你尝试:
- 打印不同大小的矩形
- 使用不同字符(如
@、+、O)构造图形 - 尝试打印多个矩形并排
- 用
if-else判断条件,实现更复杂的图案
记住:编程不是“背代码”,而是“理解逻辑”。当你能独立写出一个“打印矩形”的程序时,你就已经走在了成长的路上。
最后提醒
在编写这类程序时,请务必注意:
- 外层循环控制“行”,内层控制“列”
- 每次内层循环结束后,必须换行(
System.out.println()) - 使用
Scanner时,记得关闭输入流 - 中英文、数字与符号之间加空格,如
Java 8、System.out.println()
编程是一场持续练习的旅程。今天你写下的每一个 *,都是未来代码大厦的一块砖。坚持下去,你会看到自己的进步。
Java 实例 – 打印矩形,不只是一个练习,更是一次思维的淬炼。愿你在代码的世界里,越走越远。