Надо вернуть все дни рождения
По заданию надо ВЕРНУТЬ строки с днями рождения от 0 лет до н.в.
Задание с тестами и один из них "прошлый год", где надо вернуть 2 даты - первую (прошлый год) и вторую (нынешняя дата). Выводятся обе, а возвращается только последняя. Посоветовали с помощью StringBuilder "накапливать" (это как?) результат цикла, а я не знаю, как это сделать, уже всё перепробовал. Помогите, пожалуйста
public static String collectBirthdays(int year, int month, int day) {
LocalDate date = LocalDate.of(year, month, day);
LocalDate todayDate = LocalDate.now();
DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("dd.MM.yyyy - E", Locale.ENGLISH);
int a = 0;
String text = "";
while (date.isBefore(todayDate) || date.equals(todayDate)) {
text = a + " - " + date.format(formatDate);
System.out.println(text); //выводит нужное
a++;
date = date.plusYears(1);
}
return text; //возвращает только последнею дату
}
Ответы (2 шт):
Автор решения: Вася Воронцов
→ Ссылка
В каждой итерации дополняем StringBuilder и выводим text, возвращаем sb.toString() с объединёнными в одну строку датами:
public static String collectBirthdays(int year, int month, int day) {
LocalDate date = LocalDate.of(year, month, day);
LocalDate todayDate = LocalDate.now();
DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("dd.MM.yyyy - E", Locale.ENGLISH);
int a = 0;
String text = "";
//Создаём экземпляр StringBuilder
StringBuilder sb = new StringBuilder();
while (date.isBefore(todayDate) || date.equals(todayDate)) {
text = a + " - " + date.format(formatDate);
//Добавить в StringBuilder новую строку с датой
sb.append(text);
//Разделить между датами
sb.append(" ");
System.out.println(text);
a++;
date = date.plusYears(1);
}
return sb.toString();
}
Автор решения: Андрей Волков
→ Ссылка
Вы на каждой итерации перезатираете переменную text, а вам нужно добавлять к ней новые дни рождения.
while (date.isBefore(todayDate) || date.equals(todayDate)) {
text = text + a + " - " + date.format(formatDate) + System.lineSeparator();
a++;
date= date.plusYears(1);
}
return text;
}