2014-11-29 3 views
0

Я работаю над стандартной программой Game Of Life для моего курса Intro to Java, и до сих пор мне удалось реализовать ее самостоятельно. Тем не менее, я испытываю трудности с подсчетом соседей данной ячейки, чтобы определить, живет ли она или умирает.Game Of Life - Out Of Bounds array index

Вот мой countNeighbors метод:

public static int countNeighbors(int [][] board, int A, int B) 
{ 
    int [][]a = board; 
    int count = 0; 

    if (a[A][B] == 0 || a[A][B] == 1) { 
     try{ 
      if (a[A-1][B-1] == 1) {count++;} 
      if (a[A ][B-1] == 1) {count++;} 
      if (a[A+1][B-1] == 1) {count++;} 
      if (a[A-1][B ] == 1) {count++;} 
      if (a[A+1][B ] == 1) {count++;} 
      if (a[A-1][B+1] == 1) {count++;} 
      if (a[A ][B+1] == 1) {count++;} 
      if (a[A+1][B+1] == 1) {count++;} 
     } 

    catch (ArrayIndexOutOfBoundsException e) {} 

    } 
    return count; 
} 

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

ответ

1

Вы должны проверить, что A и B попадают под пределы массива board. Затем вы должны проверить, что добавление или вычитание 1 в A или B удерживает вас в пределах массива.

Например:

if (A < a.length && B < a[A].length) { 
    if (a[A][B] == 0 || a[A][B] == 1) { 
     if (A > 0 && B > 0) 
      if (a[A-1][B-1] == 1) {count++;} 
     .... 
     if (A+1 < a.length && B+1 < a[A].length) 
      if (a[A+1][B+1] == 1) {count++;} 
    } 
}