Java井字棋游戏符号无法正确放置问题求助
Java井字棋符号位置错误修复方案
以下是修复后的完整代码,可解决符号位置偏移、格式混乱等问题:
import java.util.Scanner; public class TicTacToe { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); System.out.println("Let's play Tic-Tac-Toe!"); // 数组仅存储棋盘格子的核心符号:初始为_,后续替换为x/o char[][] board = new char[3][3]; // 初始化棋盘 for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ board[i][j] = '_'; } } printBoard(board); boolean playerX = true; char symbol = playerX ? 'x' : 'o'; int userRow = 0; int userCol = 0; while(true){ System.out.print("Enter row and col: "); userRow = scnr.nextInt(); userCol = scnr.nextInt(); // 转换为数组的0-based索引 int arrRow = userRow - 1; int arrCol = userCol - 1; if(userRow < 1 || userCol < 1 || userRow > 3 || userCol > 3){ System.out.println("Please enter valid row and col numbers from 1 to 3:"); } else if(board[arrRow][arrCol] != '_'){ System.out.println("That spot is full!"); } else { board[arrRow][arrCol] = symbol; break; } } printBoard(board); scnr.close(); } public static void printBoard(char[][] board){ for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ // 统一拼接每个格子的格式:| 符号 System.out.print("| " + board[i][j] + " "); } // 每行末尾添加闭合的| System.out.println("|"); } } }
核心问题与修复说明
索引不匹配
用户输入的是1~3的行列号(1-based),但Java数组采用0开始的索引(0-based)。原代码直接将输入值作为数组下标,导致输入1,1时实际修改的是数组[1][1]位置(第二行第二列),这是符号位置错误的根本原因。修复时将输入值减1,转换为数组的正确索引。棋盘存储逻辑错误
原代码将带格式的字符串"| _ "存入数组,替换符号时直接用"x"覆盖,破坏了原有格式结构。改为char[][]数组仅存储核心符号(_、x、o),打印时统一拼接格式,既简化存储,又保证输出样式一致。字符串比较错误
原代码用!=判断字符串是否相等,这在Java中是比较引用而非内容。改为char数组后直接用!= '_'比较字符,更简洁准确;若坚持用String数组,需改用equals()方法比较内容。打印逻辑优化
原代码依赖数组中存储的格式字符串,修改后容易破坏样式。修复后在printBoard方法中统一处理每个格子的格式,确保每行输出都是标准的| 符号 | 符号 | 符号 |样式。
内容的提问来源于stack exchange,提问作者rhino
相关产品推荐
相关产品推荐

