如何修正二维char数组打印格式,实现桌游棋盘目标输出?
问题:消除棋盘输出的异常符号,匹配目标样式
我正在开发一款桌游,需要打印出如下目标样式的3x3二维char数组棋盘:
H _ _ _ _ _ _ _ G
但我的代码输出出现了异常符号,当前输出样式如下:
H � _ _ _ _ _ _ G
请问如何修改代码消除异常符号,使输出符合预期样式?以下是我的实现代码:
private char[][] boardMatrix; public TryingSth() { boardMatrix = new char[3][3]; // boardMatrix[0][0] = 'H'; for (int i = 0; i < boardMatrix.length; i++) { for (int j = 0; j < boardMatrix.length; j++) { if (i==0 && j==0){ System.out.print('H'); } else if (i ==2 && j==2){ System.out.print('G'); }else boardMatrix[i][j] = '_'; System.out.print(boardMatrix[i][j] + " "); } System.out.println(); } }
问题原因
- Java中未赋值的char数组元素默认是
'\u0000'(空字符),打印时会显示异常符号 if-else结构缺少大括号,导致else仅执行boardMatrix[i][j] = '_';,而System.out.print(boardMatrix[i][j] + " ");会无条件执行——左上角和右下角的数组位置未被赋值,打印时输出了默认的空字符,同时原代码提前打印的'H'/'G'和后续的数组元素打印重复,导致格式混乱
修复方案1(逻辑清晰版)
先统一初始化所有棋盘元素,再设置特殊位置,最后统一打印:
private char[][] boardMatrix; public TryingSth() { boardMatrix = new char[3][3]; // 先给所有位置初始化'_',避免空字符 for (int i = 0; i < boardMatrix.length; i++) { for (int j = 0; j < boardMatrix[i].length; j++) { boardMatrix[i][j] = '_'; } } // 设置特殊位置 boardMatrix[0][0] = 'H'; boardMatrix[2][2] = 'G'; // 统一打印棋盘 for (int i = 0; i < boardMatrix.length; i++) { for (int j = 0; j < boardMatrix[i].length; j++) { System.out.print(boardMatrix[i][j] + " "); } System.out.println(); } }
修复方案2(原循环修正版)
给if-else加上大括号,确保逻辑分支完整,直接给数组赋值后再打印:
private char[][] boardMatrix; public TryingSth() { boardMatrix = new char[3][3]; for (int i = 0; i < boardMatrix.length; i++) { for (int j = 0; j < boardMatrix.length; j++) { if (i == 0 && j == 0) { boardMatrix[i][j] = 'H'; } else if (i == 2 && j == 2) { boardMatrix[i][j] = 'G'; } else { boardMatrix[i][j] = '_'; } System.out.print(boardMatrix[i][j] + " "); } System.out.println(); } }
内容的提问来源于stack exchange,提问作者Tea Bici
相关产品推荐
相关产品推荐

