
本文详解如何使用嵌套循环与条件判断,在 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(如答案中第二个版本),但初学者建议优先采用清晰分层的结构化写法,便于调试与维护。
立即学习“Java免费学习笔记(深入)”;









