
本文详解如何使用嵌套循环和条件判断,在 java 中动态生成由不同字符构成的矩形框:外层为指定边框字符,内部区域统一填充另一字符。
要实现一个「空心矩形框」(即仅边框用 border 字符,内部全为 interior 字符),关键在于按行列位置精准控制每个字符的输出逻辑——而非简单地整行打印边框。
核心思路是:
- 首行(j == 0)和末行(j == height - 1):全部打印 border;
- 中间行(1 ≤ j ≤ height - 2):仅首列(i == 1)和末列(i == width)打印 border,其余位置打印 interior。
✅ 注意:原代码中内层循环 for (int i = 1; i以下是优化后的完整可运行代码(含清晰注释与健壮性处理):
import java.util.Scanner; public class Box { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int width; int height; char border; char interior; System.out.print("Enter width : "); width = scnr.nextInt(); System.out.print("Enter height : "); height = scnr.nextInt(); System.out.print("Enter border : "); border = scnr.next().charAt(0); System.out.print("Enter interior : "); interior = scnr.next().charAt(0); // 边界校验:确保至少能构成一个有效框(宽高 ≥ 3) if (width < 3 || height < 3) { System.out.println("Error: Width and height must be at least 3 to form a hollow box."); return; } // 主绘图循环:逐行、逐列构建 for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { // 判断是否为边框位置:首行、末行、首列、末列 if (row == 0 || row == height - 1 || col == 0 || col == width - 1) { System.out.print(border); } else { System.out.print(interior); } } System.out.println(); // 换行 } } }运行示例(输入 width=7, height=5, border='X', interior='O'):
立即学习“Java免费学习笔记(深入)”;
XXXXXXX XOOOOOX XOOOOOX XOOOOOX XXXXXXX? 关键技巧总结:
- 使用 row 和 col 从 0 开始计数,语义清晰且避免 off-by-one 错误;
- 边框判定合并为单个布尔表达式:(row == 0 || row == height-1 || col == 0 || col == width-1),简洁高效;
- 建议添加最小尺寸校验(如 width ≥ 3 && height ≥ 3),防止输入 2×2 导致“无内部空间”的逻辑异常;
- 若需进一步扩展(如居中文字、圆角等),可在此结构上分层封装绘图逻辑。
掌握这一模式,你不仅能绘制矩形框,还能轻松迁移到其他基于网格的 ASCII 图形生成任务中。









