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

JavaScript二维数组P0、P1在while循环内为undefined循环外为0原因排查

问题原因分析
  • 二维数组访问/赋值语法错误
    你代码中所有P0[z, r]、P1[i, j]这类写法不符合JavaScript语法规则。方括号内的逗号是逗号运算符,仅会返回最后一个表达式的值,比如P0[z, r]等价于P0[r],你实际拿到的不是二维数组对应行列的元素,而是P0数组下标为r的元素,取值、赋值逻辑完全错误。正确的二维数组访问写法为P0[z][r]、P1[i][j]。

  • 数组越界访问
    你通过Create2DArray(N)生成的P0、P1数组,行数为N(下标范围0N-1),每行的列数为N+1(下标范围0N)。但代码中多次出现P0[i+1][j]、P0[i][j+1]这类访问操作,当i=N-1时i+1=N超出行下标最大范围,后续边界赋值循环你还用到了z <= N+1,访问P1[N]、P1[N+1]本身就是不存在的undefined值,赋值逻辑完全无效。

  • 变量未初始化问题
    你对U和V的判断用了互斥的if...else if结构,只要U不等于0,就永远不会走到V的判断分支,导致M3、M4未被赋值为undefined,后续计算S3时使用未定义变量,结果自然为NaN或undefined,赋值给P1元素后就会出现异常值。

修复建议
  1. 将所有P0[a,b]、P1[a,b]的写法全部替换为P0[a][b]、P1[a][b]
  2. 调整边界判断避免数组越界,可将二维数组的创建尺寸适当放大,或者将i、j的循环上限调整为N-2,避免访问i+1、j+1时超出数组下标范围
  3. 将U和V的判断从互斥的else if改为独立的if,两个变量的判断分开执行,保证M1、M2、M3、M4都能被正确初始化
  4. 边界赋值的循环范围调整到数组实际的下标范围内,不要超出数组本身的长度

内容的提问来源于stack exchange,提问作者Александр Плетнев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:04