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

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. 索引不匹配
    用户输入的是1~3的行列号(1-based),但Java数组采用0开始的索引(0-based)。原代码直接将输入值作为数组下标,导致输入1,1时实际修改的是数组[1][1]位置(第二行第二列),这是符号位置错误的根本原因。修复时将输入值减1,转换为数组的正确索引。

  2. 棋盘存储逻辑错误
    原代码将带格式的字符串"| _ "存入数组,替换符号时直接用"x"覆盖,破坏了原有格式结构。改为char[][]数组仅存储核心符号(_、x、o),打印时统一拼接格式,既简化存储,又保证输出样式一致。

  3. 字符串比较错误
    原代码用!=判断字符串是否相等,这在Java中是比较引用而非内容。改为char数组后直接用!= '_'比较字符,更简洁准确;若坚持用String数组,需改用equals()方法比较内容。

  4. 打印逻辑优化
    原代码依赖数组中存储的格式字符串,修改后容易破坏样式。修复后在printBoard方法中统一处理每个格子的格式,确保每行输出都是标准的| 符号 | 符号 | 符号 |样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:35:23