如何修改Java控制台矩形绘制代码以消除行尾空格?
解决控制台绘制矩形时行尾多余空格的问题
你的代码核心逻辑没问题,但行尾多余空格是因为*每个输出单元(或空白)后都附加了空格,包括每行的最后一个单元。下面提供两种简洁的修复方案:
方案一:单独处理最后一列(高效直接)
直接在内层循环中判断当前是否是最后一列,避免给最后一个输出单元添加空格:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int rows = scanner.nextInt(); int cols = scanner.nextInt(); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { boolean isBorder = i == 0 || i == rows - 1 || j == 0 || j == cols - 1; if (j == cols - 1) { // 最后一列,输出不带空格的内容 System.out.print(isBorder ? "*" : " "); } else { // 非最后一列,正常输出带空格的内容 System.out.print(isBorder ? "* " : " "); } } System.out.println(); } scanner.close(); } }
方案二:用StringBuilder拼接整行后处理
先把整行内容拼接成字符串,再移除末尾的空格后输出,逻辑更直观:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int rows = scanner.nextInt(); int cols = scanner.nextInt(); for (int i = 0; i < rows; i++) { StringBuilder lineBuilder = new StringBuilder(); for (int j = 0; j < cols; j++) { if (i == 0 || i == rows - 1 || j == 0 || j == cols - 1) { lineBuilder.append("* "); } else { lineBuilder.append(" "); } } // 移除末尾的空格 if (lineBuilder.length() > 0) { lineBuilder.setLength(lineBuilder.length() - 1); } System.out.println(lineBuilder); } scanner.close(); } }
方案对比
- 方案一:无需额外的字符串操作,性能更优,适合处理大尺寸的矩形绘制。
- 方案二:代码逻辑更易读,适合新手理解,对小尺寸场景来说差异可以忽略。
内容的提问来源于stack exchange,提问作者Ярослав Гавран
相关产品推荐
相关产品推荐

