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

求助:检查游戏二维数组是否填满的函数逻辑错误问题

问题分析与解决方法

核心问题

你的代码出现两个关键错误:

  1. 棋盘数组结构错误:初始化的每个子数组是空数组,导致内层循环无法检测未填充位置
  2. 判断逻辑颠倒:棋盘填满的判定结果与游戏流程的对应逻辑完全相反

代码修正步骤

1. 修正棋盘数组初始化

将空数组子项替换为带占位值的固定长度数组(用null表示未填充的位置):

// 正确初始化3x3棋盘,每个位置用null标记未填充
let arrayOne = [
  [null, null, null],
  [null, null, null],
  [null, null, null],
];

2. 重写棋盘填满检测函数

修改函数逻辑,检查每个位置是否为初始占位值(null),而非检测子数组长度:

function isBoardFilled() {
  for (let i = 0; i < arrayOne.length; i++) {
    const row = arrayOne[i];
    for (let j = 0; j < row.length; j++) {
      // 只要存在未填充的位置,就返回false
      if (row[j] === null) {
        return false;
      }
    }
  }
  // 所有位置都已填充,返回true
  return true; 
}

3. 修正游戏流程判断逻辑

结合胜负判断,正确处理平局与游戏继续的分支:

// 假设你有一个checkWinner函数用于判断是否有玩家获胜
const hasWinner = checkWinner();

if (!hasWinner && isBoardFilled()) {
  // 无人获胜且棋盘已满,触发平局结束
  console.log("游戏以平局结束");
} else if (!hasWinner) {
  // 无人获胜但棋盘未满,游戏继续
  console.log("游戏继续");
} else {
  // 有玩家获胜,游戏结束
  console.log("游戏结束,获胜方已产生");
}

错误原因说明

  • 原数组的空数组子项导致内层循环直接跳过(row.length为0),函数错误判定棋盘已填满
  • 原判断逻辑将isBoardFilled()返回true(棋盘已满)的情况对应"游戏继续",完全颠倒了业务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:59:26