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

如何修复井字棋方法中Index 9 out of bounds for length 9错误

问题原因及修复方案

1. 核心错误(数组越界)

你遇到越界报错的根本原因是棋盘行偏移量计算错误:

  • 你定义boardSpace为棋盘总格子数(33棋盘时值为9),每行的格子数应为 size = (int) Math.sqrt(boardSpace)(33棋盘时值为3)
  • 原代码中第i行的起始下标错误写为 i * boardSpace,按这个逻辑计算第2行(i=1)的起始下标就是1*9=9,直接超出了长度为9的数组的最大下标(8),正好匹配你遇到的报错。

2. 其他逻辑缺陷

除了越界错误外,你的代码还有多处逻辑问题需要修正:

  • matchingX 没有在每行遍历结束后重置,会出现跨行累加的错误
  • 胜负判断阈值错误:横向连成size个就算赢,阈值应为size-1而非boardSpace-1,3*3棋盘只要连续2次匹配就说明3个格子相同
  • 返回值逻辑颠倒:匹配成功时应该返回true而非false
  • 没有提前终止逻辑:已经检测到某行满足胜负条件时不需要继续遍历剩余行

3. 修复后代码

boolean checkHorz(int boardSpace) {
    int size = (int) Math.sqrt(boardSpace);
    for (int i = 0; i < size; i++) {
        int matchingX = 0; // 每行开始前重置匹配计数
        for (int j = 0; j < size - 1; j++) {
            // 行偏移修正为 i * size
            int curIdx = i * size + j;
            int nextIdx = curIdx + 1;
            if (data[curIdx].equals(data[nextIdx]) && !data[curIdx].equals("_")) {
                matchingX++;
                // 匹配数达到阈值直接返回胜利
                if (matchingX == size - 1) {
                    return true;
                }
            } else {
                matchingX = 0;
            }
        }
    }
    // 所有行都不满足条件返回失败
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:45:02