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

本文详解如何使用嵌套循环和条件判断,在 java 中动态生成由指定边框字符和内部填充字符组成的矩形框,支持任意宽高及字符组合。

要实现一个“外框为一种字符、内部为另一种字符”的矩形(如 X 为边框、O 为填充),关键在于区分每一行和每一列的位置角色:首行、末行、首列、末列应打印边框字符;其余所有位置则打印内部填充字符。

原始代码中,内外统一使用 border 打印,因此整个框全是边框。修复的核心逻辑是:在双重循环中,通过 if-else 判断当前坐标 (j, i) 是否处于边界位置:

  • 行索引 j == 0 → 第一行(上边框)
  • 行索引 j == height - 1 → 最后一行(下边框)
  • 列索引 i == 1 或 i == width → 当前行的首列或末列(左右边框)
  • 其余情况 → 内部区域,输出

    interior

注意:原代码中内层循环起始为 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);

        // 边界校验:最小尺寸应为 2×2,否则无法形成“内部”
        if (width < 2 || height < 2) {
            System.out.println("Error: Width and height must be at least 2 to form a bordered box.");
            return;
        }

        // 主绘图循环
        for (int j = 0; j < height; j++) {
            for (int i = 1; i <= width; i++) {
                // 判断是否为边界位置:首行、末行、首列、末列
                if (j == 0 || j == height - 1 || i == 1 || i == width) {
                    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

⚠️ 注意事项

  • 若输入 width=1 或 height=1,将无法区分“边框”与“内部”,程序会输出全边框(逻辑上退化为线段)。建议添加最小尺寸校验(如上所示),提升鲁棒性。
  • 使用三元运算符可进一步精简内层逻辑(如答案中提供的短版本),但初学者推荐显式 if-else 结构,更易调试与理解。
  • scnr.next().charAt(0) 可安全读取单字符;若用户输入空格或多个字符,仅取首字符——这是本题合理假设,如需更严格输入控制,可配合 scnr.nextLine() 和字符串长度校验。

掌握此模式后,可轻松扩展为圆角框、阴影效果、甚至 ASCII 艺术图形——核心始终是:用坐标逻辑驱动字符选择