如何在函数中修改多维数组的值?井字棋程序数组修改失败问题
井字棋数组值不更新的问题解决
你的代码里所有对board数组的访问都多了一层[0]索引,这是导致赋值无效的核心原因。你定义的board是3×3的二维数组,每个元素是单个字符串,但你错误地把它当成三维数组来操作:
比如初始的board[2][0]是"_",但你写board[2][0][0]其实是取这个字符串的第一个字符(也就是"_"),而JavaScript里字符串是不可变的,所以这种赋值方式根本不会修改原数组里的元素。
修复步骤
- 把所有
board[i][j][0]的写法改成board[i][j],覆盖赋值、读取的所有场景; - 简化随机数生成逻辑:你只需要两种分支情况,
randomizeInt(2)就足够生成0或1的随机数,没必要取0-9的范围。
修正后的完整代码
let board = [["X", "O", "O"], ["X", "O", "O"], ["_", "_", "O"]]; function randomizeInt(max) { return Math.floor(Math.random() * max); } function nextMove() { let randomInt = randomizeInt(2); if (randomInt === 0) { board[2][0] = "X"; board[2][1] = "O"; } else { board[2][0] = "O"; board[2][1] = "X"; } } function displayBoard() { console.log("| " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " |"); console.log("| " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " |"); console.log("| " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " |"); } function winnerCheck() { for (let i = 0; i < 8; i++) { let ans = null; switch (i) { case 0: ans = board[0][0] + board[0][1] + board[0][2]; break; case 1: ans = board[1][0] + board[1][1] + board[1][2]; break; case 2: ans = board[2][0] + board[2][1] + board[2][2]; break; case 3: ans = board[0][0] + board[1][0] + board[2][0]; break; case 4: ans = board[0][1] + board[1][1] + board[2][1]; break; case 5: ans = board[0][2] + board[1][2] + board[2][2]; break; case 6: ans = board[0][0] + board[1][1] + board[2][2]; break; case 7: ans = board[2][0] + board[1][1] + board[0][2]; break; } if (ans === "XXX") { console.log("X is the winner"); } else if (ans === "OOO") { console.log("O is the winner"); } } } nextMove(); displayBoard(); winnerCheck();
内容的提问来源于stack exchange,提问作者MWBradshaw
相关产品推荐
相关产品推荐

