You need to enable JavaScript to run this app. JS编写打印size*size正方形矩阵函数执行报错问题排查
优惠活动
大模型
产品
解决方案
定价
更多

JS编写打印size*size正方形矩阵函数执行报错问题排查

JS正方形星号矩阵代码报错问题排查

原代码核心报错原因

  • 语法认知偏差:JavaScript 不支持 C/Java 这类语言中的数组名[长度1][长度2]静态数组声明语法。原代码中let mat = [size][size];的实际执行逻辑和预期完全不符:代码会先创建一个空数组字面量[],随后访问这个空数组下标为size的元素(空数组无对应下标,取值结果为undefined),最后试图对这个undefined的size下标属性做赋值操作,直接触发Cannot set properties of undefined类型报错
  • 冗余越界逻辑:内层j循环执行完成后,代码额外编写了mat[i][j] = '*';的赋值语句,此时j的值已经跳出循环条件、等于size,对应下标早已超出数组合法范围,属于无意义的冗余代码
  • 功能设计偏离:函数命名为矩阵打印,但原代码仅实现返回二维数组的逻辑,没有实际的控制台打印输出能力

修正后的可运行实现

function printSquareMatrix(size) {
  // 入参合法性校验
  if (typeof size !== 'number' || size <= 0 || !Number.isInteger(size)) {
    throw new Error('size参数必须传入正整数');
  }
  // 正确初始化size行size列的二维数组结构
  const mat = Array.from({ length: size }, () => new Array(size));

  for (let i = 0; i < size; i++) {
    for (let j = 0; j < size; j++) {
      mat[i][j] = '*';
    }
    // 打印当前行的矩阵内容
    console.log(mat[i].join(' '));
  }
  // 如需返回矩阵结构可直接返回
  return mat;
}

// 测试调用
printSquareMatrix(3)

修正要点

  • 替换错误的初始化语法:用Array.from动态生成二维数组,保证mat是真正具备size行、每行size个元素的二维结构
  • 简化循环边界条件:将原来容易写错的i <= size - 1、j <= size -1替换为语义更清晰的i < size、j < size,避免边界值计算失误
  • 删除越界冗余赋值逻辑,减少无意义的运行时操作
  • 补充入参校验,避免传入非正整数时触发无限循环或异常
  • 补充实际打印逻辑:每行填充完成后拼接成连续字符串输出,真正实现正方形矩阵的打印效果

内容的提问来源于stack exchange,提问作者Y.Ivanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 10:15:02