Задача на java: написать программу, что будет выводить все дни твоего рождения на 5 лет вперед двумя способами: просто все в main, что изи, и с помощью ООП. И во втором случае после выполнения, причем правильного, выводится куча ошибок. С ООП я пока не слишком разобрался, и пока очень сложно понять, в чем собственно причина
package birthday;
public class Dispatcher {
public static void main(String[] args) {
Birthday bd = Controller.bd(2019, 5,13);
}
}
package birthday;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
public class Controller {
public static Birthday bd(int y, int m, int d){
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat("EEEE, d MMMM yyyy");
while (y<=2024) {
gc.set(y, m, d);
Date date = gc.getTime();
System.out.println(df.format(gc.getTime()));
y++;
}
return (bd(y,m,d));
}
}
package birthday;
public class Birthday {
private int year;
private int month;
private int day;
public Birthday(int y, int m, int d){
this.year = y;
this.month = m;
this.day = d;
}
}
Ваш код работает в принципе неправильно. Дни недели, которые он выводит в консоль, не соответствуют датам. А ошибка, которую вы получаете, возникает потому, что ваш метод bd вызывает сам себя return (bd(y,m,d)) и это происходит бесконечно, в связи с чем у вас заканчивается память. А в целом есть принцип YAGNI под названием KISS, что означает "сделай это проще". Эта задача решается из коробки и очень просто. А еще обратите внимание на пакет java.time он появился в java 8 и заменил java.util.Date (это вообще позор java, как по мне). Посему настоятельно рекомендуется пользоваться именно java.time.
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
class Dispatcher {
public static void main(String[] args) {
getDirhday(2019, 5, 13, 5);
}
private static void getDirhday(int y, int m, int d, int count) {
for (int i = y; i < y+count+1; i++)
System.out.println(LocalDate.of(i, m, d) + " : " +
LocalDate.of(i, m, d).getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.forLanguageTag("ru")));
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей