Программа состоит из трёх классов:
-
Класс
Animal
используется для описания "животного", он содержит поле для имени, а также поля для хранения количества связей как конкретного "животного", так и всех "животных" в целом, также в нём есть методы необходимые для обработки существующих в классе полей. -
Класс
Statement
используется для описания уникальной связи двух "животных" через утверждение: есть утверждение, характеризующее отличительный признак двух животных, на которое можно ответить "да" или "нет" - например: "животное живёт на суше", "да" - кот, "нет" - кит. Также в этом классе перегружен методtoString()
для вывода информации о связи двух животных, а также есть два метода (один статический, другой - нет) для расчёта "кода" двух животных - эти два метода нужны, чтобы сравнить создающуюся пару животных с уже имеющимися, так как нельзя создавать одинаковые пары. -
В классе
Main
- два вспомогательных метода:printInfo()
, который используется для вывода информации о "животных" и связях между ними, и методinputVerification
необходимый для проверки ввода и возвращающий 'код ввода', реализованный с помощью перечисленияinputCode
.
Все утверждения (Statement
) хранятся в массиве, экземпляры класса Animal
хранятся в хэш-таблице по ключу, которым является имя животного. Компьютер задаёт вопрос, выбирая одно из утверждений из массива, отталкиваясь от ответа, полученного от пользователя, выдвигает предположение о том или ином "животном". Если компьютер угадывает, то предлагает сыграть ещё раз, если же не угадывает, то задаёт два вопроса: "Какое животное вы загадали?" и затем "Чем 'загаданное животное' отличается от 'предложенного' животного?". Далее заносит новую запись в массив и предлагает сыграть ещё раз.
Хэш-таблица нужна для того, чтобы удобно и быстро "брать" уже готовые объекты "животных" и не создавать при установлении связей одни и те же экземпляры класса Animal
.