❗️ Задача:
Реализуйте метод: public static String collectBirthdays(int year,
int month, int day), который вернёт строки, содержащие все ваши прошедшие дни рождения от момента рождения до текущей даты в требуемом формате. Дата рождения передаётся в метод тремя числами.
Формат требуемого вывода, если ваш день рождения —
31 декабря 2014 года, а сейчас — 1 апреля 2022 года:
0 - 31.12.2014 - Wed
1 - 31.12.2015 - Tue
2 - 31.12.2016 - Sat
3 - 31.12.2017 - Sun
4 - 31.12.2018 - Mon
5 - 31.12.2019 - Tue
6 - 31.12.2020 - Thu
7 - 31.12.2021 - Fri
✒️ Приступим!
Метод collectBirthdays()
📌Обращаем внимание, что в условие задачи уже указан, тип возвращаемого значения (String) и входные параметры
(int year, int month, int day).
✎ Инициализируем переменные для реализации поставленной задачи:
- String result = ""; - сюда будем записывать необходимые значения и возвращать, как результат выполнения метода
- LocalDate birhday = LocalDate.of(year, month, day); - в этой переменной будет храниться день рождение.
「Статический метод .of() возвращает объект, который представляет дату с определенными годом, месяцем и днем. На вход мы передали входные параметры нашего метода collectBirthdays」
- LocalDate toDay = LocalDate.now(); - исходя из условия задачи, здесь будем хранить текущую дату.
「Статический метод .now() класса LocalDate возвращает объект, который представляет текущую дату」
📌В соответствии с условием задачи, зададим требуемый формат используя класс DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern
("dd.MM.yyyy - E").localizedBy(new Locale("us"));
Статический метод .localizedBy(new Locale("us")) необходим для соблюдения требуемого формата вывода дней недели на английском языке.
📌Напишем цикл, в котором будет увеличивать нашу дату рождения на 1 год, сравнивать с текущей датой и фиксировать результат в переменной result.
✎ Воспользуемся циклом while, в определение которого укажем необходимые условия для продолжения его работы:
- сравнение даты дня рождения с текущей на предмет того, что день рождение раньше;
- проверка эквивалентности дат, на тот случай если день и месяц
дня рождения совпадают с текущей датой, таким образом мы будем проверять не только год.
✎ Также необходимо инициализировать переменную для управления нашим циклом
int i = 0;
while (birhday.isBefore(toDay) || birhday.isEqual(toDay)) {
ㅤresult += i++ + " - " + birhday.format(formatter) + "\n";
ㅤbirhday = birhday.plusYears(1);
}
↘️ Итого для получения результата работы нашего метода необходимо добавить ключевое слово return; и готово!:
public static String collectBirthdays(int year, int month, int day) {
ㅤString result = "";
ㅤLocalDate birhday = LocalDate.of(year, month, day);
ㅤLocalDate toDay = LocalDate.now();
ㅤDateTimeFormatter formatter = DateTimeFormatter
ㅤㅤㅤㅤ.ofPattern("dd.MM.yyyy - E")
ㅤㅤㅤㅤ.localizedBy(new Locale("us"));
ㅤint i = 0;
ㅤwhile (birhday.isBefore(toDay) || birhday.isEqual(toDay)) {
ㅤㅤresult += i++ + " - " + birhday.format(formatter) + "\n";
ㅤㅤbirhday = birhday.plusYears(1);
ㅤ}
ㅤreturn result;
}
✅ Можно считать задачу выполненной, проверим вывод в консоль в методе main().
Метод main()
📌 Зададим переменные, содержащие в себе день, месяц и год рождения.
Например: int day = 20; int month = 2; int year = 2012;
📌 Вызовем наш метод, и передадим созданные нами переменные ему на вход с выводом информации в консоль.
public static void main(String[] args) {
ㅤint day = 20;
ㅤint month = 2;
ㅤint year = 2012;
ㅤSystem.out.println(collectBirthdays(year, month, day));
}
▶️ Run 'Main.main()'