помогите с этой Java-программой

#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 соответственно.