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

如何在函数中修改多维数组的值?井字棋程序数组修改失败问题

井字棋数组值不更新的问题解决

你的代码里所有对board数组的访问都多了一层[0]索引,这是导致赋值无效的核心原因。你定义的board是3×3的二维数组,每个元素是单个字符串,但你错误地把它当成三维数组来操作:

比如初始的board[2][0]是"_",但你写board[2][0][0]其实是取这个字符串的第一个字符(也就是"_"),而JavaScript里字符串是不可变的,所以这种赋值方式根本不会修改原数组里的元素。

修复步骤

  1. 把所有board[i][j][0]的写法改成board[i][j],覆盖赋值、读取的所有场景;
  2. 简化随机数生成逻辑:你只需要两种分支情况,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:28:31