lots of exercises in java... from https://github.com/exercism/java

Meetup.java 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import java.time.LocalDate;
  2. import java.time.DayOfWeek;
  3. class Meetup {
  4. private final LocalDate startOfMonth;
  5. Meetup(int monthOfYear, int year) {
  6. startOfMonth = LocalDate.of(year, monthOfYear, 1);
  7. }
  8. LocalDate day(DayOfWeek dayOfWeek, MeetupSchedule schedule) {
  9. LocalDate current = cycleToNext(dayOfWeek, startOfMonth);
  10. switch (schedule) {
  11. case FIRST:
  12. break;
  13. case SECOND:
  14. current = current.plusWeeks(1);
  15. break;
  16. case THIRD:
  17. current = current.plusWeeks(2);
  18. break;
  19. case FOURTH:
  20. current = current.plusWeeks(3);
  21. break;
  22. case TEENTH:
  23. while (current.getDayOfMonth() < 13) {
  24. current = current.plusWeeks(1);
  25. }
  26. break;
  27. case LAST:
  28. current = cycleToPrev(dayOfWeek, startOfMonth.plusMonths(1).minusDays(1));
  29. break;
  30. default:
  31. return null;
  32. }
  33. return current;
  34. }
  35. private LocalDate cycleToPrev(DayOfWeek dayOfWeek, LocalDate current) {
  36. while (current.getDayOfWeek() != dayOfWeek) {
  37. current = current.minusDays(1);
  38. }
  39. return current;
  40. }
  41. private LocalDate cycleToNext(DayOfWeek dayOfWeek, LocalDate current) {
  42. while (current.getDayOfWeek() != dayOfWeek) {
  43. current = current.plusDays(1);
  44. }
  45. return current;
  46. }
  47. }