0

Итак, я создаю своего рода приложение «Игра жизни» в java и обнаружил некоторые проблемы с обнаружением, когда индекс отсутствует. Код ниже - это модифицированная версия из еще один вопрос здесь из SO.Проверьте, является ли индекс OutOfBounds в 2D-массиве

2D массива:

1,1,1,1 
1,1,1,1 
1,1,1,1 
1,1,1,1 

Код

private void traverse() {  
     for (int i = 0; i < brickArray.length; i++) { 
      for (int j = 0; j < brickArray[i].length; j++) { 

       System.out.println(i - 1 + "," + j); 
       checkIfAllowed(i - 1, j); 

      } 
     } 
    } 

    public void checkIfAllowed(int row, int column) { 
    boolean incorrect = check(row) && check(column); 
    if (incorrect) { 
     System.out.println("Wall"); 
    } else { 
     System.out.println("Road"); 

    } 
} 

private boolean check(int index) { 
    return (index < 0 || index > board.getHeight()); 
} 

Результат:

Обход:

-1,0 
Road 
-1,1 
Road 
-1,2 
Road 
-1,3 
Road 
0,0 
Road 
0,1 
Road 
0,2 
Road 
0,3 
Road 
1,0 
Road 
1,1 
Road 
1,2 
Road 
1,3 
Road 
2,0 
Road 
2,1 
Road 
2,2 
Road 
2,3 
Road 

В этом примере четыре верхние ячейки должны были напечатать «Стена», но они этого не сделали.

+0

'check' в этом случае, кажется, подразумевает ** неправильный ** вместо ** правильный ** –

+0

' return (index <1 || index> board.getHeight()); 'Вы понимаете, что' 0' является меньше, чем '1', правильно? – bradimus

+0

Где вы определяете 'board' и его метод' getHeight() '? – Dez

ответ

0

Ловушка отрицательных имен и нейтральных имен (check).

boolean incorrect = check(row) || check(column); 

Если строка или столбец неверны, все координаты неверны.

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