Open
Conversation
Когда волк и заяц находятся на одной клетке, логично, что заяц должен быть съеден. Для имитации поедания зайца, недостаточно удалить зайца из локального списка beasts, также требуется удалить его и из переменной экземпляра текущего класса. Поэтому была добавлена переменная ateHares для хранения списка съеденных зайцев. В конце выполнения очередной итерации, эти зайцы съедены и удаляются из программы
Прошу прощения за мою невнимательность и настойчивость. 1) Вы сказали, что "Добавленный код ничего не делает, тк добавления элементов в ateHares не происходит". И это действительно так. Все из-за моей невнимательности. Дело в том, что я редактировал код через веб-версию гита и пропустил одну строчку - №118 ateHares.add(ateHare); 2) Есть два списка beasts. Один объявлен в строке 15 и это действительно не локальный список, а переменная класса. Но речь в моем комментарии шла о локальной переменной beasts объявленной в строке №115. и удаление зайца из строки №120 beasts.remove(ateHare); происходит именно из этой переменной, а не из переменной класса WildlifeSanctuary 3) Я, таки настаиваю, что в вашей реализации заяц попавший на одну клетку с волком бежит себе дальше, так как далеко не один раз протестировал работу симулятора на скорости в 10 раз ниже дефолтной и всякий раз происходило то, о чем я говорю. После моей редакции этого не происходило, заяц съедался полностью. вариант с попадание в одну клетку двух зайцев я исключаю, т.к. считаю, что протестировал достаточное количество раз и ни разу не получил обратного результата.
m9ist
reviewed
Jan 8, 2020
Owner
m9ist
left a comment
There was a problem hiding this comment.
Согласен, не усмотрел 115 строчку.
В коде (даже после вашего исправления) есть объективный косяк, который заключается в том, что мы создаем коллекцию в цикле beasts, а потом удаляем зайца из нее (хотя коллекция больше не будет использоваться и на что-то влиять), те строчка 119 либо лишняя (если мы идем по пути предложенного вами исправления), либо надо вообще весь ваш коммит изменить.
В моем понимании лучше было бы причесать сам код в цикле:
- Переименовать локальную коллекцию beasts -> aliveHaresInCell (или как-то так), чтобы она коррелировала с ее предназначением и самодокументировала код, особенно на случай выделения алгоритма поиска жертвы в функцию (класс/сервис и тд) - первый коммит, стилистический.
- В строчке удаления съеденного кролика из коллекции заменить локальную вспомогательную коллекцию на глобальную - второй коммит.
Этот вариант лучше еще и с точки зрения логики, тк в ячейке может оказаться 2 волка и они не должны съесть одного зайца, поэтому удалять жертву с поля нужно сразу. В качестве бонуса, алгоритм будет менее многословен.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
В ответ на: