Перед тем как отправить своё решение на проверку преподавателю, сверьтесь с чеклистом.
1. В решении выполнены все требования задания
Убедитесь, что все требования задания выполнены. Для этого перед отправкой внимательно прочтите весь текст условия задания и соотнесите сказанное в нём с вашим решением. Навык самопроверки работы перед ревью пригодится вам как при обучении, так и на работе.
2. Правильно настроен Maven-проект, тесты проходят
Репозиторий должен быть папкой вашего Мавен-проекта. Обратите внимание, что репозиторием не должна быть папка, в которой лежит папка Мавен-проекта, он сам должен быть папкой проекта. В нём должны быть соответствующие файлы и папки — pom.xml
, src
и другие.
Не забудьте создать .gitignore-файл в корне проекта и добавить туда в игнорирование автогенерируемую папку target
.
Общая схема вашего pom.xml
-файла:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ru.netology</groupId>
<artifactId>НАЗВАНИЕ-ВАШЕГО-ПРОЕКТА-БЕЗ-ПРОБЕЛОВ</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
...
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
...
</plugin>
<plugin>
...
<executions>
<execution>
...
</execution>
...
</executions>
</plugin>
...
</plugins>
</build>
</project>
Обратите внимание, что у артефакта нет -api
на конце. Если у вас автоматически добавилась зависимость вида <artifactId>junit-jupiter-api</artifactId>
, то лучше поменять артефакт на тот, что ниже, иначе будут сюрпризы в работе.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
Без этого плагина тесты могут Мавеном не запускаться, хоть в идее через кнопки они и будут проходить. Чтобы лишний раз убедиться, что всё работает, нажмите Ctrl+Ctrl
и затем mvn clean test
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<failIfNoTests>true</failIfNoTests>
</configuration>
</plugin>
3. Что делать, если возникли сложности
Это здорово. Если их преодолевать правильно, то можно получить большую образовательную пользу для себя. Периодическое возникновение вопросов, недопонимание пройденного материала — нормальная и неотъемлемая часть обучения. А мы здесь, чтобы помочь вам пройти этот путь.
- Если подобный вопрос разбирался на лекции, посмотрите ещё раз раздел с этой темой в видеозаписи.
- Если вопрос не решился, попробуйте поискать ответ самостоятельно в интернете, этот навык пригодится вам в работе.
- Если самостоятельно разобраться не удалось, задайте вопрос в общем чате, мы обязательно поможем.
- Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос. Умение работать с текстом — важный навык работы с информацией.
- Если ответа на свой вопрос в тексте условия не увидели, задайте его в общем чате, мы раскроем детали условия.
Если ваша проблема — это ошибка компиляции — подчёркивает красным, не даёт запустить программу, сборки проекта, CI и прочие подобные ошибки, то:
- Найдите и прочитайте текст ошибки, который вам подсвечивает идея или логи. «Подчёркивает красным» — это не описание ошибки.
- Попробуйте понять текст ошибки, при необходимости воспользуйтесь переводчиком. Не страшно, если вы переведёте неточно, тут главное — сам процесс: со временем и с нашей помощью вы будете это делать лучше и лучше, но, пропуская этот этап, вы не сможете научиться это делать.
- Если не получилось понять ошибку по её тексту, попробуйте её загуглить и изучить подобную ошибку у других людей. Попробуйте примерить решения их проблем на свой код. Соотнесите найденные описания ошибки с пройденной теорией.
- Если всё равно ваши трудности не разрешились, напишите в общий чат, обязательно указав:
- название задачи и ссылку на условие;
- ссылку на вашу работу;
- текст и скриншот, не фотографию, ошибки;
- ваши размышления и описание шагов, которые вы совершили для решения.
Если ваша проблема — это ошибка исполнения, программа умирает уже после запуска, или она отрабатывает неправильно, из-за чего ваши тесты не проходят, то:
- Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы или убедитесь в неправильности придуманного вами алгоритма, или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
- Если проблему найти не получилось, напишите в общий чат, обязательно указав:
- название задачи и ссылку на условие;
- ссылку на вашу работу;
- конкретное и подробное описание проблемы или затруднения при решении задачи. «Помогите, что-то не так» — это не описание;
- подробное описание вашего анализа программы с помощью отладчика вместе со скринами;
- ваши размышления и описание шагов, которые вы совершили для решения.
4. Отформатирован код
Кроме правил, нарушение которых приводит к ошибкам компиляции, есть ещё и правила форматирования кода, соблюдение которых обязательно при написании программ.
С большинством проблем может справиться автоформатирование в идее. Для этого выберите Code -> Reformat code
в меню или используйте горячие сочетания клавиш. В меню будет показано актуальное сочетание для вашей операционной системы. Так, идея поправит неправильные отступы, пробелы и некоторые другие ошибки. Следите, чтобы у if-else
, for
, while
всегда были {}
.
Проблемы с именованием сущностей нужно решать самим. Так, все ячейки, кроме final
-констант, и методы должны писаться камелкейсом с маленькой буквы, а классы и интерфейсы — камелкейсом с большой буквы.
Мы вам настоятельно советуем всегда держать код в отформатированном виде во время разработки, со временем глаз привыкнет, и вы почувствуете, насколько это облегчает поиск ошибок в коде и его анализ. В любом случае перед отправкой кода на проверку его обязательно нужно отформатировать, иначе он может быть отправлен на доработку без более глубокой проверки на этой итерации.
Вспомните условие задачи из курса по ручному тестированию, где вы общались с сервером. Тогда на сервер вы посылали информацию в виде JSON — текстового формата описания объекта в JavaScript-стиле, выглядела она так:
{
"birthday": "13.06.1999",
"name": "Иван",
"passport": "4444 № 44444444",
"patronymic": "Иванович",
"phone": "+7 (999)-999-99-99",
"surname": "Иванов"
}
Немного усложним и добавим в неё ещё информацию о том, согласен ли пользователь получать новости о скидках в виде sms: "subscription": true
. Также предлагается, чтобы дата рождения была не полем-строкой, а тоже объектом: "birthday": {"day" : 13, "month": 6, "year": 1999}
. В итоге объект в запросе будет выглядеть, например, так:
{
"birthday": {
"day": 13,
"month": 6,
"year": 1999
},
"name": "Иван",
"passport": "4444 № 44444444",
"patronymic": "Иванович",
"phone": "+7 (999)-999-99-99",
"surname": "Иванов",
"subscription": true
}
Вашей задачей будет разработать классы, описывающие объекты запроса анкеты на сервер, и продемонстрировать их работу в Main
.
Создайте класс Post
, описывающий объект запроса на сервер, и заполните его полями. Сперва можно без birthday
, так как для него придётся создавать вспомогательный класс, выбрав подходящие типы:
public class Post {
public String name; // поле для имени
// добавьте другие поля
}
Создадим класс Main
, в main
которого создадим и заполним наш объект:
public class Main {
public static void main(String[] args) {
Post post = new Post();
post.name = "Иван";
// заполните другие поля
}
}
Поставим точку останова на последней строчке, можно прямо на закрывающей фигурной скобке main
, и запустим отладчик, чтобы посмотреть, что у нас будет лежать в переменной с объектом:
Если вы сделали всё правильно, то в отладчике будет виден созданный и заполненный объект типа Post
по схеме данных — полей — указанных вами в классе Post
.
Осталось добавить поле birthday
. Значение в этом поле должно быть объектом, для которого также нужно будет создать свой класс. Создайте класс FormDate
для описания схемы объекта в поле birthday
:
public class FormDate {
// добавьте три необходимых поля
}
Теперь в классе Post
добавьте поле birthday
с типом FormDate
. После чего добавьте заполнение этого поля в main
:
post.birthday = new FormDate();
post.birthday.day = 13;
// заполните другие поля даты рождения
Запустите отладчик снова и убедитесь, что всё заполнено как надо и соответствует JSON-описанию объекта выше.
При отправке решения в личном кабинете прикрепите ссылку на ваш публичный репозиторий GitHub.