如何用 Java 根据用户输入创建带自定义边框与填充的矩形框

本文详解如何使用嵌套循环和条件判断,在 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'):

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 图形生成任务中。