我正在尝试解决算法问题,但我一直收到这个错误,这让我很沮丧:
var data = [".......", "...O...", "....O..", ".......", "OO.....", "OO....."]
var R = 6;
var C = 7;
var N = 3;
var cell = new Array(R);
for (i=0; i<R; i++) {
cell[i] = new Array(C);
}
for (i=0; i<R; i++) {
var currentRow = data[i].split("");
for (j=0; j<C; j++) {
cell[i][j] = currentRow[j];
}
}
for (x=0; x<=N; x++) {
for (i=0; i<R; i++) {
for (j=0; j<C; j++) {
if (cell[i][j] == '.') {
cell[i][j] = 0;
} else if (cell[i][j] == 'O') {
cell[i][j] = 1;
} else if (cell[i][j] == 3) {
cell[i][j] = 0;
// Why are these following 4 LINES are not working???
cell[i + 1][j] = 0;
cell[i - 1][j] = 0;
cell[i][j + 1] = 0;
cell[i][j - 1] = 0;
} else if (cell[i][j] >= 0) {
cell[i][j] += 1;
}
}
}
}
罪魁祸首是当我们尝试使用像
这样的操作的2D数组时cell[i + 1][j] = 0;
cell[i - 1][j] = 0;
cell[i][j + 1] = 0;
cell[i][j - 1] = 0;
我不知道原因,但继续TypeError: Cannot set property '1' of undefined
答案 0 :(得分:1)
如果数组的第一个水平或第一个垂直单元格等于3,则不能执行i - 1
或j -1
。同样的事情,如果最后一个水平单元格或最后一个垂直单元格等于3,则不能i + 1
或j + 1
。所以你只需要检查wheter不是你的二维数组的第一个或最后一个垂直单元格。
答案 1 :(得分:1)
看起来这些代码行有时会访问数组的边界。通过更改这4行来保证访问保持在边界内,代码将在没有错误消息的情况下工作,如下所示:
// Why are these following 4 LINES are not working???
if (i < R - 1) {
cell[i + 1][j] = 0;
}
if (i > 0) {
cell[i - 1][j] = 0;
}
if (j < C - 1) {
cell[i][j + 1] = 0;
}
if (j > 0) {
cell[i][j - 1] = 0;
}
这是link to a jsfiddle我放置了更新的代码。