Переменная типа boolean в условии останавливает выполнение программы. Почему?

95
02 сентября 2019, 19:50

Мне нужно в качестве задания написать простенькую программу по условиям игры "Жизнь". Все значения поля у меня хранятся в массиве булевых значений. Мной был написан метод, который проверяет ячейки вокруг клетки по разным условиям и увеличивает счётчик +1 если находит "живую" (true) ячейку. КРоме условий расположения естественно есть условие которое берёт значение из массива. И если это значение false то исполнение почему-то останавливается и дальше не идёт. В примере ниже "1" не будет выведен в консоль и программа не завершиться (так и будет висеть чего-то ждать) если fieldLikeBooArray[length - width + point] примет значение false:

public int checkPointsAround(int point, int width, boolean[] fieldLikeBooArray){
    int alivePointsAround = 0;
    int length = fieldLikeBooArray.length;
    int count = 0;
    if (count == 0 && point - width < 0 && fieldLikeBooArray[length - width + point]) alivePointsAround++;                                                            //верхний сосед первая строка
    else if (count == 0 && fieldLikeBooArray[point - width]) alivePointsAround++;                                                                              //верхний сосед остальные строки
    System.out.println(1);
    return alivePointsAround;}

Почему? При этом если разбить это на два отдельных условия (что кажется очень кривым), то работает. Пример:

if (point - width < 0) {
    if (fieldLikeBooArray[length - width + point]) alivePointsAround++;                                                            //верхний сосед первая строка
    }
else if (fieldLikeBooArray[point - width]) alivePointsAround++;
System.out.println(1);

Возможно вопрос предельно простой, но я уже вторые сутки не могу понять где ошибся. Help! При необходимости могу выложить весь код.

Answer 1

Похоже я понял в чём ошибка. Неправильно брать часть поля в качестве условия выполнения. Т.к. из-за этого он от частного случая (если ячейка "false") переходит к общему и там падает с ArrayIndexOutOfBoundsException.

Почему программа не завершается и ошибка не падает в консоль - для меня загадка.

READ ALSO
Как строку преобразовать в имя пэкеджа

Как строку преобразовать в имя пэкеджа

buffer - это StringBuilder полученный из ввода пользователя(buffer

107
Взаимное заполнение EditText-ов

Взаимное заполнение EditText-ов

Задача чтоб, при изменении первого editText'а изменялся 2-ой, а при изменении 2-го - первый

130
Выдает исключение Exception in Application constructor

Выдает исключение Exception in Application constructor

Решил погуглить и посикать примеры, где в ячуйку таблицы TableView добавляется кнопка, и когда начал запускать проект у себя постоянно выбрасывает...

106
Firebase onDisconnect и RemovalValue выдают ошибку (Java, Android)

Firebase onDisconnect и RemovalValue выдают ошибку (Java, Android)

При нажатии на выход из аккаунта приложение показывает ошибку в строке: currentrefonDisconnect()

125