如何实现文本星号包裹方法?改进Java星号框打印代码
改进后的Java星号框实现代码
针对需求,我们修复并扩展原有代码,实现两种星号框包裹「Hello, World!」的效果,以下是完整代码:
public class StarWriter { // 打印n个星号并换行 void printStars(int n) { for (int i = 0; i < n; i++) { System.out.print("*"); } System.out.println(); } // 打印样式1:简单星号框 void writeBoxStyle1() { String text = "Hello, World!"; // 总宽度:左右各2个* + 左右各1个空格 + 文本长度 int totalWidth = 2 + 2 + text.length(); // 顶部星号线 printStars(totalWidth); // 打印中间文本行 System.out.printf("** %s **%n", text); // 底部星号线 printStars(totalWidth); } // 打印样式2:嵌套星号框 void writeBoxStyle2() { String text = "Hello, World!"; // 总宽度匹配示例样式的21个星号 int totalWidth = 21; // 顶部星号线 printStars(totalWidth); // 外层上方嵌套行 System.out.println("*** ***"); System.out.println("** **"); // 中间文本行 System.out.printf("* %s *%n", text); // 外层下方嵌套行 System.out.println("** **"); System.out.println("*** ***"); // 底部星号线 printStars(totalWidth); } public static void main(String[] args) { StarWriter writer = new StarWriter(); System.out.println("样式1:"); writer.writeBoxStyle1(); System.out.println("\n样式2:"); writer.writeBoxStyle2(); } }
代码改进说明
- 修复
printStars方法:移除硬编码的14个星号,改为根据传入参数n打印对应数量的星号,完成后自动换行。 - 实现样式1:
- 通过计算文本长度确定星号线总宽度,确保星号线与中间文本行宽度一致。
- 使用
printf格式化中间行,保证「Hello, World!」前后的空格和星号排版规范。
- 实现样式2:
- 匹配示例的21个星号总宽度,依次打印外层星号线、上下嵌套的星号行,最后输出带星号包裹的文本行。
- 主方法中分别调用两个样式方法,清晰展示两种效果。
内容的提问来源于stack exchange,提问作者quiznakinghumans
相关产品推荐
相关产品推荐

