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

如何在JavaScript中将一维数组元素存入9x9数组?数独求解器遇问题

修复数独一维数组转9x9二维数组的问题

嘿,我帮你排查出代码里的几个关键问题,咱们一步步来解决:

问题分析

你的代码出现两个核心问题,导致最终输出还是全null的二维数组:

1. 拼写错误

内层循环里的problemArray.lenght是笔误,正确的拼写应该是problemArray.length。这个错误直接导致内层循环根本没有执行,所以sudoku数组完全没被赋值。

2. 循环逻辑错误

你用了双层循环来处理一维转二维,但逻辑完全不对:

  • problemArray是81个元素的一维数组,对应9x9二维数组的每一个格子,不需要双层循环。
  • 就算拼写修复,你的逻辑会把sudoku[i][0]到sudoku[i][8]全部赋值为problemArray[i],这会让每一行的所有格子都是同一个值,而且当i>=9时,sudoku[i]不存在(因为sudoku只有9行),还会抛出数组越界错误。

3. 额外的小问题

  • 循环变量i和j没有用let/var声明,会变成全局变量,容易引发意外bug。
  • 原字符串中的数字是字符类型,直接赋值的话后续数独计算会不方便,建议转为数字类型,-保持为null。

修复后的代码

// 创建空的9x9数组
var sudoku = Array(9).fill(null).map(() => Array(9).fill(null));
// 字符串格式的数独示例
var problemString = "1-58-2----9--764-52--4--819-19--73-6762-83-9-----61-5---76---3-43--2-5-16--3-89--";
// 将问题字符串转为数组
var problemArray = problemString.split('');

// 遍历一维数组的每个元素,映射到二维数组对应位置
for (let i = 0; i < problemArray.length; i++) {
    // 计算当前元素对应的行索引:i除以9取整(0-8)
    const rowIndex = Math.floor(i / 9);
    // 计算当前元素对应的列索引:i除以9的余数(0-8)
    const colIndex = i % 9;
    // 转换值:'-'保留null,数字转为Number类型
    sudoku[rowIndex][colIndex] = problemArray[i] === '-' ? null : Number(problemArray[i]);
}

console.log(sudoku);

代码解释

  • 用单个循环遍历81个元素,通过Math.floor(i/9)得到行号,i%9得到列号,完美对应9x9数组的每个位置。
  • 修复了拼写错误,确保循环正常执行。
  • 用let声明循环变量,避免全局变量污染。
  • 统一值的类型:数字转为Number,占位符-转为null,方便后续数独求解的逻辑判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:39