Сапер. Проверка нулевых клеток

189
12 ноября 2021, 02:20

Java Если нажимаем на пустую клетку, все пустые вокруг открываются до непустых. Кажется происходит зацикливание, пока не могу понять почему

//Внутри проверки клетки по нажатию, условие - клетка пустая (ее значение 0)
//arrayOfActions - очередь ArrayDeque из координат
arrayOfActions.addLast(i);
arrayOfActions.addLast(j);
while (arrayOfActions.size() != 0){
      checkFields(arrayOfActions.poll(),arrayOfActions.poll());//Проверка клеток смежных
}

...... //Закончилась функция проверки нажатия кнопок

boolean checkFields(int i, int j)
    {
        states[i][j] = State.OPENED; //Состояние: открытая клетка
        if(j != 0) {
            if (field[i][j - 1] == CellValue.NUMBER) {   //Число, не бомба
                if (fieldValues[i][j - 1] != 0) {  //Если не пустая(нулевая)
                    states[i][j - 1] = State.OPENED;
                } else { 
                    arrayOfActions.addLast(i);
                    arrayOfActions.addLast(j - 1);
                }
            }
        }
        if(j != n-1) {
            if (field[i][j + 1] == CellValue.NUMBER) {
                if (fieldValues[i][j + 1] != 0) {
                    states[i][j + 1] = State.OPENED;
                } else {
                    arrayOfActions.addLast(i);
                    arrayOfActions.addLast(j + 1);
                }
            }
        }
        if(i != 0) {
            if (field[i - 1][j] == CellValue.NUMBER) {
                if (fieldValues[i - 1][j] != 0) {
                    states[i - 1][j] = State.OPENED;
                } else {
                    arrayOfActions.addLast(i - 1);
                    arrayOfActions.addLast(j);
                }
            }
        }
        if(i != n-1) {
            if (field[i + 1][j] == CellValue.NUMBER) {
                if (fieldValues[i + 1][j] != 0) {
                    states[i + 1][j] = State.OPENED;
                } else {
                    arrayOfActions.addLast(i + 1);
                    arrayOfActions.addLast(j);
                }
            }
        }
        return true;
    } 
READ ALSO
Как заменить одно значения двух массивов, чтобы после замены у них было одинаковая сумма. (java) [закрыт]

Как заменить одно значения двух массивов, чтобы после замены у них было одинаковая сумма. (java) [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

93
spring crudRepository null pointer exception

spring crudRepository null pointer exception

Есть класс @Entity ResultCode, далее есть интерфейс который extends CrudRepository, в классе контроллера я могу пользоваться resultCodeRepository интерфейсом, но в других...

74
Точные типы в Java

Точные типы в Java

Есть ли в Java точные типы? Потому что как мы знаем в float/double происходит потеря точности и деньги в таких типах хранить не стоит

100