井字棋游戏开发作业: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
相关产品推荐
相关产品推荐

