#java
#java
Вопрос:
Я пишу Java-программу для ввода года и месяца в формате «1999-5», что означает 1999 год и месяц июнь. (месяцы начинаются с 0 = января, 1 = февраля).
Где 1999 — это год, а 5 — числовая последовательность месяца (соответствующая июню). Программа должна отобразить день, на который выпало 28 июня 1999 года, и в этом случае выводом будет ПОНЕДЕЛЬНИК.
У меня есть логика и частичный код. Я ввожу строку, разбиваю ее, преобразую в целое число и отправляю в обработку. Как мне отделить разделитель «-» при вводе строки.
Входные данные программы должны быть «1999-5», выходные данные должны быть в понедельник. (28 июня 1999 года выпадает на понедельник)
int num;
Scanner sc=new Scanner(System.in);
String name=sc.nextLine();
String delimiter = "-";
temp= name.split(delimiter);
num= Integer.parseInt(name);
System.out.println(temp);
System.out.println(num);
Пожалуйста, скажите мне, есть ли лучший способ сделать это.
Комментарии:
1. Почему вы печатаете temp? Метод split возвращает массив строк, поэтому вам следует выполнить синтаксический анализ для temp[0] и temp[1] (если они, конечно, существуют).
2. нет, нет, я не печатаю temp. Я тестировал код, поэтому немного его перепутал.
Ответ №1:
В этом случае вам лучше использовать SimpeDateFormat
.
Date d = new SimpleDateFormat("yyyy-MM-dd").parse(name "-28")
Используйте Calendar
, чтобы получить день недели:
Calendar cal = Calendar.getInstance();
cal.setTime(d);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)
//switch (dayOfWeek) ...
Комментарии:
1.
SimpleDateFormat
Важно ли, чтобы в месяце, который вы указываете, не было начального 0,MM
или вам нужно использовать простоM
вместо этого?2. Нет, это не важно, 2011-5 будет отлично работать с форматом гггг-ММ
3. @veredesmarald: как сказал Тейн, это не имеет значения
Ответ №2:
Дополните идеей от @TheStijn, используя шаблон с "-dd"
для манипулирования входными данными.
Но нам также нужно изменить месяц, чтобы получить июнь для ввода 5
String pattern = "yyyy-MM-dd";
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
formatter.setLenient(false);
int year = Integer.parseInt(name.substring( 0, name.lastIndexOf( '-' ) ));
int month = Integer.parseInt(name.substring( name.lastIndexOf( '-' ) 1 ));
Date date = formatter.parse(year "-" (month 1) "-28");
if( date != null ) {
System.out.println(date);
}
Комментарии:
1. Я не думаю, что требуется месяц 1; посмотрите на первую строку в вопросе.
Ответ №3:
Вы можете сделать это следующим образом:
String name = "1999-5";
String[] temp = name.split("-");
int year = Integer.parseInt(temp[0]);
int month = Integer.parseInt(temp[1]);
Будьте осторожны, это parseInt()
может выдать NumberFormatException
, поэтому вы можете захотеть его перехватить.
Кстати, Joda Time может подсказать вам день недели: посмотрите здесь.
Комментарии:
1. @TheStijin: Я не заметил, что вопрос был помечен как
homework
2. @macro: Я не помечал это как домашнее задание! Я не знаю, как это получилось.
3. @user750092: другой пользователь SO с более высокой репутацией пометил как таковой, потому что ваш вопрос выглядел как
homework
. Это действительноhomework
? Если нет, я могу удалить тег.4. Это не домашнее задание, хотя и выглядит как таковое. Это проблема, на которой застрял мой друг. Теперь с ним все ясно. Спасибо вам, ребята из SO .. Не имеет значения, помечено ли это также как домашнее задание.
Ответ №4:
temp
должен быть массив строк ( String[] temp
), и вы анализируете значения num[0] и num[1], чтобы получить 1999 и 5 соответственно.