Реагировать - перебирать массив 2d и сравнивать текущий элемент с соседними элементами и их значениями - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь перебрать 2D-массив, который служит игровым полем.Мне нужно пройтись по каждому элементу [x] [y] в 2D-массиве, а затем просмотреть все соседние ячейки и определить, содержат ли они 1 или 0. Я создаю приложение John Conway Game of Life и мне нужно определитьсколько существует «живых» (соседних ячеек в двумерном массиве, которые содержат 1).

Когда я использовал вложенные циклы for, чтобы перебрать двумерный массив и попытаться сравнить текущую ячейку с ее соседями, которые я запускаюв неопределенную ошибку.

for(let x = 0; x < this.state.boardHeight; x++) {
        for(let y = 0; y < this.state.boardWidth; y++) {
          let neighborCount = 0;
          // Game of Life logic pertaining to squares being alive/dead
          neighborCount += oldBoard[x - 1][y - 1];
          neighborCount += oldBoard[x][y - 1];
          neighborCount += oldBoard[x + 1][y - 1];
          neighborCount += oldBoard[x - 1][y];
          neighborCount += oldBoard[x + 1][y];
          neighborCount += oldBoard[x - 1][y + 1];
          neighborCount += oldBoard[x][y + 1];
          neighborCount += oldBoard[x + 1][y + 1];

          console.log('neighborCount ' + neighborCount[x]);

          // If square has 2 live neighbors it stays alive
          if(neighborCount == 2) {
            newBoard[x][y] = oldBoard[x][y];
          }
          // If square has exactly 3 neighbors a new life square is born
          else if (neighborCount == 3) {
            newBoard[x][y] = 1;
          }
          // Is square has more than 3 live neighbors it dies
          else if(neighborCount > 3){
            newBoard[x][y] = 0;
          }
        }
       }

Все neighborCount += oldBoard[x][y] строки кода возвращены неопределенными.В чем проблема с тем, как я повторяю и сравниваю?

Cannot read property '-1' of undefined
App._this.componentDidUpdate
/src/App.js:93:43
  90 | for(let y = 0; y < this.state.boardWidth; y++) {
  91 |   let neighborCount = 0;
  92 |   // Game of Life logic pertaining to squares being alive/dead
> 93 |   neighborCount += oldBoard[x - 1][y - 1];
     |                                   ^
  94 |   neighborCount += oldBoard[x][y - 1];
  95 |   neighborCount += oldBoard[x + 1][y - 1];
  96 |   neighborCount += oldBoard[x - 1][y];

Это ошибка, которую я получаю. Вот кодовый ящик со всей программой.

1 Ответ

0 голосов
/ 05 октября 2018

Ответ в вашем сообщении об ошибке: Cannot read property '-1' of undefined

Ваш код начинается с x = 0, y = 0, а затем первая строка пытается получить доступ к oldBoard[x - 1][y - 1], так что же это означает?

Ответ: oldBoard[0 - 1][0 - 1], то есть oldBoard[-1][-1]

oldBoard[-1], оценивается как undefined, так что в сущности он пытается undefined[-1], но undefined не имеет свойства с именем-1, поэтому выдает ошибку.

Вам нужно будет написать свой код таким образом, чтобы он не пытался просмотреть недопустимые ячейки.

...