我正试图为一种扫雷游戏编写一种打字方法,该方法可以查看某一领域的邻居是否是地雷,而且每次我都会遇到同样的错误:
Uncaught TypeError: Cannot read properties of undefined (reading '5') private getNeighbours(field: Field[][]): number[][]{
let mineNeighbours: number[][] = new Array(field.length)
.fill(0)
.map(() => new Array(field.length).fill(0));
for (let i = 0; i < field[0].length; i++){
for (let j = 0; j < field[1].length; j++){
for (let yOffset = -1; yOffset < 2; yOffset++){
for (let xOffset = -1; xOffset < 2; xOffset++){
if (!(i + yOffset < 0 || i + yOffset > field[0].length || j + xOffset < 0 || j + xOffset < field[1].length || xOffset == 0 || yOffset == 0)){
if (field[i + yOffset][j + xOffset] instanceof Mine){
mineNeighbours[i][j]++;
}
}
}
}
}
}
return mineNeighbours;
}错误来自我检查当前字段是否是of实例的行
我试着调试它,认为我通过了一个未定义的测试,但这不是问题所在。我的猜测是,在检查地雷的上面,如果句子有问题。该方法应该返回一个int数组,其中包含每个字段的邻居数。
发布于 2022-03-24 18:52:26
您的错误将出现在if语句中。
let validY = i + yOffset >= 0 || i + yOffset < field[0].length;
let validX = j + xOffset >= 0 || j + xOffset < field[1].length;
let isDifferentCell = xOffset !== 0 && yOffset !== 0;
if( validY && validX && isDifferentCell ) {
if (field[i + yOffset][j + xOffset] instanceof Mine){ // Also is there a reason why this needs to be checked can the field value not be an instance of Mine? I would remove this if its always going to be a Mine
mineNeighbours[i][j]++;
}
}这样可以更好地清理它,因此更容易阅读(如果这样的语句很大,就会让人感到困惑)。我相信你的问题是你在重复检查每一个x和y。因此,有可能是无效的指数,但另一个不是。
https://stackoverflow.com/questions/71606823
复制相似问题