为什么我会收到错误:TypeError: grid[(x + i)] is undefined?

问题描述 投票:0回答:1

所以我有这个功能,它是创建康威生命游戏项目的一部分 里面有一个计算邻居的函数,但它不起作用

这是我编写的代码

function countNeighbours(grid, x, y){
  let count = 0;
  for (let i = - 1; i < 1; i++){
    for (let j = - 1; j < 1; i++){
      
      count += grid[x + i][y + j]
    } 
  }
  count -= grid[x][y];
  return count;
}

但它返回 grid[x + i] 未定义,为什么?

javascript conways-game-of-life
1个回答
0
投票

问题在于两个

for
循环的循环条件。目前,您将
i
j
初始化为 -1,但只要
i
j
小于 1,循环条件就会继续。这意味着循环仅在
i
时迭代。或
j
为 -1,且不覆盖所有相邻小区。

您需要调整循环条件以覆盖

i
j
的 -1 到 1(含)范围。这是更正后的代码:

function countNeighbours(grid, x, y) {
  let count = 0;
  for (let i = -1; i <= 1; i++) { // Loop over rows
    for (let j = -1; j <= 1; j++) { // Loop over columns
      // Skip counting the cell itself
      if (i === 0 && j === 0) continue;
      
      // Check if the neighboring cell is within the grid bounds
      if (x + i >= 0 && x + i < grid.length && y + j >= 0 && y + j < grid[0].length) {
        count += grid[x + i][y + j];
      }
    } 
  }
  return count;
}

在此更正后的代码中:

  • i
    j
    都从-1到1循环,覆盖所有相邻单元格。
  • 我在循环内添加了一个检查以跳过对单元格本身进行计数。
  • 我还添加了边界检查,以确保我们不会访问网格边界之外的元素。
© www.soinside.com 2019 - 2024. All rights reserved.