Перед тем, как отправить своё решение на проверку преподавателю, сверьтесь с чеклистом
Что делать, если возникли сложности?
И это здорово! Если их преодолевать правильно, то можно получить большую образовательную пользу для себя. Периодическое возникновение вопросов, недопонимание пройденного материала - нормальная и неотъемлемая часть обучения. А мы здесь, чтобы помочь вам пройти этот путь.
- Если подобный вопрос разбирался на лекции, посмотрите еще раз раздел с этой темой в видеозаписи.
- Если вопрос не решился, попробуйте поискать ответ самостоятельно в интернете, этот навык пригодится вам в работе.
- Если самостоятельно разобраться не удалось, задайте вопрос в общем чате, мы обязательно поможем.
- Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос. Умение работать с текстом - важный навык работы с информацией.
- Если ответа на свой вопрос в тексте условия не увидели, задайте его в общем чате, мы раскроем детали условия подробнее. Не забудьте при этом скинуть и ссылку на условие задания, про которую у вас вопрос.
Если ваша проблема это ошибка компиляции (подчёркивает красным, не даёт запустить программу), сборки проекта, CI и прочие подобные ошибки, то:
- Найдите и прочитайте текст ошибки, который вам подсвечивает реплит, идея (или логи); "подчёркивает красным" - это не описание ошибки.
- Попробуйте понять текст ошибки, при необходимости воспользуйтесь переводчиком. Нестрашно, если вы переведёте неточно, тут главное сам процесс: со временем и с нашей помощью вы будете это делать лучше и лучше, но, пропуская этот этап, вы не сможете научиться это делать.
- Если не получилось понять ошибку по её тексту, попробуйте её загуглить и изучить подобную ошибку у других людей. Попробуйте примерить решения их проблем на свой код. Соотнесите найденные описания ошибки с пройденной теорией.
- Если все равно вашу трудности не разрешились, напишите в общий чат, обязательно указав:
- Название задачи и ссылку на условие
- Ссылку на вашу работу
- Текст и скриншот (не фотография) ошибки.
- Ваши размышления и описание шагов, которые вы совершили для решения.
Если ваша проблема это ошибка исполнения (программа умирает уже после запуска) или она отрабатывает неправильно, то:
- Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы либо убедитесь в неправильности придуманного вами алгоритма или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
- Если проблему найти не получилось, напишите в общий чат, обязательно указав:
- Название задачи и ссылку на условие
- Ссылку на вашу работу
- Конкретное и подробное описание проблемы или затруднения при решении задачи ("Помогите что не так" - это не описание)
- Подробное описание вашего анализа программы с помощью отладчика вместе со скринами
- Ваши размышления и описание шагов, которые вы совершили для решения.
В решении выполнены все требования задания
Убедитесь, что все требования задания выполнены. Для этого перед отправкой внимательно прочтите весь текст условия задания и соотнесите сказанное в нём с вашим решением. Навык самопроверки работы перед ревью пригодится вам как при обучении, так и на работе.
Сдаём через гитхаб
Время пришло познакомиться с профессиональными инструментами для контроля версий вашего кода. Теперь мы не сдаём домашние задания в реплите, а заливаем проект из идеи сразу же в публичный гитхаб-репозиторий. Одна задача - один репозиторий.
Для того чтобы в репозитории не отслеживался всякий мусор, не забывайте добавлять .gitignore.
В нём должны игнорироваться файлы идеи (правила *.iml и .idea), папки для автогенерируемых результатов сборки (out, позже - target).
Этот файл должен находиться в корне вашего репозитория, а сам репозиторий должен быть инициализирован в корне вашего проекта.
Т.е. открывая репозиторий вы должны сразу видеть папку src.
Если вы забыли проигнорировать какие-либо файлы и они попали в репозиторий, используйте команду git rm.
Вам предстоит реализовать класс MagicBox (англ. магическая коробка), который умеет выбирать случайным образом один из сохранённых в него объектов.
При конструировании объекта этого класса указывается, сколько объектов в него можно положить (механика похожа на решение этой задачи).
Тип добавляемых объектов должен быть тип-параметром класса - т.е. сам класс должен быть дженерик-классом с одним тип-параметром.
У вас должен быть метод добавления объекта boolean add(T item).
Если коробка ещё не полна, то элемент должен в ней сохраниться и метод вернуть true.
Если полна, то коробка не должна измениться, а метод должен вернуть false.
Также нужно реализовать метод T pick(), работающий следующим образом:
- Если коробка не полна, то он выкидывает
RuntimeExceptionс сообщением, что коробка не полна и осталось ещё столько-то ячеек заполнить - Если коробка полна, то метод выбирает случайным образом (см. ниже) один из сохранённых элементов и возвращает его из метода.
Хранить сохранённые элементы предлагаем в массиве, как в задаче про полиморфизм). Массив создавать в конструкторе, размером который был указан в его параметре.
Для выбора случайного элемента воспользуйтесь классом Random (не забудьте заимпортить):
Random random = new Random();
int randomInt = random.nextInt(ЧИСЛО); // джава подберёт случайное число от 0 до ЧИСЛО невключительноВ Main продемонстрируйте работу класса, создайте для этого магическую коробку для строк и вторую для чисел и продемонстрируйте на них работу методов.
Не забудьте, что теперь мы сдаём через гитхаб!
Для создания массива с ячейками типа дженерик-параметра используйте: T[] items = (T[]) new Object[РАЗМЕР];.
Для определения незаполненности кородки проверьте массив items на наличие null.
Для выбора случайного элемента выберите случайное число-индекс массива и верните его содержимое.