Пишу игру "Сапёр" и там хотят от меня посчитать мины (флаг состояния) по-соседству от каждой ячейки. Я вижу два варианта решения:
1) Пачка условных операторов, которые будут учитывать координаты моей ячейки (если у углу, то соседи там-то там-то).
2) Обработка ArrayIndexOutofboundsException.
Я склоняюсь ко второму, но всё же хотелось бы узнать как лучше, с точки зрения грамотного кода.
П.С. Мб есть ещё какие-то решения, но я их не вижу.
Kroak
29 уровень
Обработка исключений vs куча операторов if
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас Пасинков Software Developer в Zipy Master
29 августа 2019, 10:58
ArrayIndexOutofboundsException - это объект. с кучей полей (чего только один стектрейс весит). и выбор между тем, чем каждый раз нести затраты на создание этих объектов, или же четко прописать логику - лично у меня сомнений не вызывает.
много ифов - не всегда плохо. много ифов это плохо, когда их можно заменить циклом например.
можете вынести валидацию размеров поля (чтобы не были меньше 0 и больше максимального размера) в отдельный метод с понятным названием, а в ифах вызывать его наряду с самой логикой сравнения. а саму вереницу ифов завернуть в свой отдельный метод. в общем, "спрятать" их, если не хотите их в своем коде видеть))
+2
Стас Пасинков Software Developer в Zipy Master
29 августа 2019, 11:11
а этот метод уже вызвать внутри двух циклов. первый от х-1 до х+1, второй от у-1 до у+1.
в таком случае даже если вывалимся за диапазон - ничего страшного.
итого: 2 цикла и один иф
0
Kroak Senior Vampire в Hellsing corp.
30 августа 2019, 16:24
Спасибо за объяснение.
0
Alex T
22 августа 2019, 22:39
Может дело в структуре данных. Если рассматривать каждую ячейку поля, как объект, который имеет ссылки на всех соседей, то и вопрос вычисления должен упроститься.
А по поводу ArrayIndexOutofboundsException - это все же исключительная ситуация, а не часть нормального исполнения программы.
+1
Justinian Judge в Mega City One Master
22 августа 2019, 21:24
Всегда есть варианты, но их целесообразность определяет контекст..
Думаю в этом конкретном случае, тебе главное решить и приблизительно знать, почему то или иное решение не есть оптимальным.
По поводу твоих вопросов, так или иначе ответы на них можно найти в секции Обсуждение задачи. Там и кто как решал, и по поводу исключений тоже упоминается.
+1