如何用 Java 根据用户输入绘制带填充的字符矩形框

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

要实现一个“外框为一种字符、内部为另一种字符”的矩形框,关键在于区分边界位置与内部位置:第一行和最后一行(j == 0 或 j == height - 1)应全部打印边框字符;中间行则仅在首列(i == 1)和末列(i == width)打印边框字符,其余位置打印填充字符。

以下是完整、可运行的改进代码(已修复原逻辑缺陷并增强健壮性):

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 box with interior.");
            return;
        }

        // 主绘图循环
        for (int j = 0; j < height; j++) {
            for (int i = 1; i <=

width; i++) { if (j == 0 || j == height - 1) { // 第一行或最后一行:全为边框 System.out.print(border); } else { // 中间行:首尾列是边框,其余为内部字符 if (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

关键要点说明

  • 外层循环 j 控制行号(0 到 height−1),内层循环 i 控制每行的列号(1 到 width,注意起始为 1 更符合直观理解);
  • 使用 if-else 分层判断,先按行类型(顶/底 vs 中间),再按列位置(边缘 vs 内部)精准控制输出字符;
  • 添加了最小尺寸校验(width ≥ 2 且 height ≥ 2),避免退化为线段或单点,提升程序鲁棒性;
  • 原代码中 i

? 进阶提示:若追求简洁,可使用三元运算符替代嵌套 if(如答案中第二个版本),但初学者建议优先采用清晰分层的结构化写法,便于调试与维护。