Проще всего иметь значения Scanner
read int
вместо строк:
int m = in.nextInt();
int d = in.nextInt();
int y = in.nextInt();
System.out.println(LocalDate.of(y, m, d).getDayOfWeek());
Когда я кормлю 5 4 2018
(сегодняшняя дата), я получаю FRIDAY
, что правильно.
Если вы должны использовать строки:
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/u");
String m = in.next();
String d = in.next();
String y = in.next();
System.out.println(LocalDate.parse(m + '/' + d + '/' + y, dateFormatter).getDayOfWeek());
Класс Calendar
, который вы использовали, давно устарел, плохо спроектирован и иногда неудобен в работе. Вместо этого я рекомендую java.time
, современный Java API даты и времени. Это намного приятнее. С одной стороны, она нумерует месяцы года так же, как люди.
Также встроены названия дней недели, поэтому не изобретайте велосипед заново. Ваши строки совпадают с именами значений перечисления DayOfWeek
в java.time
, поэтому просто напечатайте их, чтобы получить нужные вам строки. Если вам не нужны прописные буквы или названия дней на другом языке, используйте DayOfWeek.getDisplayName
или DateTimeFormatter
.
Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time
.