Running into Uncaught TypeError: Cannot read property of undefined
Running into Uncaught TypeError: Cannot read property of undefined
我有一个算法可以修改 BattleShip 游戏的 10x10 2D 数组,以在随机方向随机放置船只。
棋盘是这样的:
var board= [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 2
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 4
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 5
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 6
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 7
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 8
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] // 9
];
该算法会将 0 变为 1,并将随机船放置在随机索引和随机方向上。数组是这样的:var array = [5, 4, 3, 3, 2]
(数字代表长度,例如五个 1,四个 1,等等)该算法在大多数情况下都运行良好,并且会 运行 直到数组为空。
问题是,我偶尔会 运行 进入 Uncaught TypeError: Cannot read property of <some integer> undefined
仅当它试图将船超出范围时将其置于向上或向下方向。检查所选方向是否越界的 if 语句会发生错误,如下所示:
// check out of bounds for UP direction
if (x - 1 < 0 || array[x - i][y] == undefined) {
break;
}
// check out of bounds for DOWN direction
if (x + 1 > 9 || array[x + i][y] == undefined) {
break;
}
我认为错误的发生与尝试执行 array[x - i][y]
和 array[x + i][y]
的负索引有关。我以为我已经通过使用 x - 1 < 0
和 x + 1 > 9
添加额外的 OR 检查来解决这个问题,但我仍然 运行 进入这个异常。
根据评论,问题是 array[x + i]
和 array[x - i]
没有边界检查。因此,对 array[x +/- i][y]
的调用会导致 cannot read property ... of undefined
错误。
我有一个算法可以修改 BattleShip 游戏的 10x10 2D 数组,以在随机方向随机放置船只。
棋盘是这样的:
var board= [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 2
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 4
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 5
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 6
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 7
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 8
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] // 9
];
该算法会将 0 变为 1,并将随机船放置在随机索引和随机方向上。数组是这样的:var array = [5, 4, 3, 3, 2]
(数字代表长度,例如五个 1,四个 1,等等)该算法在大多数情况下都运行良好,并且会 运行 直到数组为空。
问题是,我偶尔会 运行 进入 Uncaught TypeError: Cannot read property of <some integer> undefined
仅当它试图将船超出范围时将其置于向上或向下方向。检查所选方向是否越界的 if 语句会发生错误,如下所示:
// check out of bounds for UP direction
if (x - 1 < 0 || array[x - i][y] == undefined) {
break;
}
// check out of bounds for DOWN direction
if (x + 1 > 9 || array[x + i][y] == undefined) {
break;
}
我认为错误的发生与尝试执行 array[x - i][y]
和 array[x + i][y]
的负索引有关。我以为我已经通过使用 x - 1 < 0
和 x + 1 > 9
添加额外的 OR 检查来解决这个问题,但我仍然 运行 进入这个异常。
根据评论,问题是 array[x + i]
和 array[x - i]
没有边界检查。因此,对 array[x +/- i][y]
的调用会导致 cannot read property ... of undefined
错误。