Я делаю игру-сапер и хочу сохранить мины вокруг каждого поля в массиве чисел двухмерный. Я пробовал это с помощью этого кода:
let minesAround : number[][] = new Array<Array<number>>(config.fieldSize);
for (let col : number = 0; col < playingField.length; col++)
for(let row : number = 0; row < playingField[0].length; col++){
minesAround[col][row] = getNumOfMinesAround(playingField, col, row);
}
но я получаю ошибку TypeError: невозможно установить свойства undefined (настройка «0») в Typescript в строке:
minesAround[col][row] = getNumOfMinesAround(playingField, col, row);
Я отладил метод getNumOfMinesAround, он работает без проблем и возвращает число.
Редактировать
Внутренний массив не инициализирован, как я могу его инициализировать? Отладка изображения
загляните в свой minesAround
, что возвращает minesAround[col]
? Он должен вернуть массив
let minesAround : number[][] = new Array<Array<number>>(config.fieldSize);
Эта строка помогает вам создать только 1-е измерение, но значения 2-го измерения не определены, как показано ниже.
"minesAround": [
undefined,
undefined,
undefined,
undefined,
undefined
]
Вам нужно добавить размер строки для minesAround
let minesAround : number[][] = new Array<Array<number>>(config.fieldSize);
for (let i = 0; i < minesAround.length; i++) {
minesAround[i] = new Array(config.fieldSize)
}
Вторая проблема заключается в вашем цикле строк
let row : number = 0; row < playingField[0].length; col++
Должно быть row++
вместо col++
for (let col : number = 0; col < playingField.length; col++) {
for(let row : number = 0; row < playingField[0].length; row++){
minesAround[col][row] = getNumOfMinesAround(playingField, col, row);
}
}
Спасибо, но когда я получу этот ошибка
Я думаю, вам нужно использовать правильный кронштейн для петли. Вы можете попробовать это здесь typescriptlang.org/play?#code/… @HansPeter
Подумайте о том, что происходит первоначально, когда массив пуст.