You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

井字棋游戏开发作业:printBoard方法打印棋盘不符合预期的技术求助

修复井字棋棋盘打印问题

我帮你排查了这段printBoard代码里的几个问题,这些就是导致棋盘样式不符合预期的核心原因:


问题1:顶部多余空行

你开头加了System.out.println(" ");,这会在列号和第一行棋盘之间多出一行空白,直接删掉它就能解决顶部留白的问题。

问题2:分隔线对齐错误+最后一行多余分隔线

当前的分隔线" |---|---|---|"开头只有一个空格,和行开头的" A "(两个空格包裹字母)不对齐;而且循环结束后最后一行也会打印这条分隔线,导致棋盘底部多一条多余的线。

问题3:列号位置不对齐

原有的" 1 2 3 "列号位置和下面的格子不对齐,需要调整空格让它对应每个格子的中心位置。


修正后的代码

public void printBoard() {
    char[] rowLabels = {'A', 'B', 'C'}; // 用数组简化行标签逻辑,更简洁
    // 调整列号的空格,让它和下方格子对齐
    System.out.println("    1   2   3 ");
    for (int i = 0; i < board.length; i++) {
        // 打印行标签,保持统一格式
        System.out.print(" " + rowLabels[i] + " ");
        for (int j = 0; j < board[i].length; ++j) {
            System.out.print("|");
            System.out.print(" " + board[i][j] + " ");
        }
        // 把最后的|移到循环外面,避免重复判断j的位置
        System.out.println("|");
        // 只有不是最后一行的时候才打印分隔线
        if (i != board.length - 1) {
            // 调整分隔线的开头空格,和行标签对齐
            System.out.println("   |---|---|---|");
        }
    }
    System.out.println();
}

每个修改的细节说明

  • 把单独的a/b/c变量换成了rowLabels数组,简化了行标签的判断逻辑,代码更整洁易维护。
  • 删除了顶部多余的空行,让列号直接和第一行棋盘衔接,符合紧凑的棋盘样式。
  • 调整了列号的空格为" 1 2 3 ",这样每个数字刚好对应下方格子的中心位置,视觉对齐更舒服。
  • 把每行末尾的|移到了j循环外面,不用再判断j+1 == board[i].length,逻辑更清晰。
  • 给分隔线开头加了两个空格变成" |---|---|---|",和行标签" A "的宽度对齐,解决了分隔线偏移的问题。
  • 增加了if (i != board.length - 1)判断,只在中间行下方打印分隔线,避免最后一行多出多余的线。

这样修改后,打印出来的棋盘就会和你预期的样式一致啦!

内容的提问来源于stack exchange,提问作者Dill Cliq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:47:34