求助:检查游戏二维数组是否填满的函数逻辑错误问题
问题分析与解决方法
核心问题
你的代码出现两个关键错误:
- 棋盘数组结构错误:初始化的每个子数组是空数组,导致内层循环无法检测未填充位置
- 判断逻辑颠倒:棋盘填满的判定结果与游戏流程的对应逻辑完全相反
代码修正步骤
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
相关产品推荐
相关产品推荐

