Григорианский календарь: получение пользователя (day_of_the_week) из его собственного ввода на день рождения - PullRequest
0 голосов
/ 05 октября 2018

Я - ОЧЕНЬ любитель-программист, который, похоже, не может решить проблему с получением дня недели (например, воскресенья, понедельника и т. Д.) Из введенных пользователем целых чисел.Я просто пытаюсь дать пользователю сообщение, которое выкладывается (mm / dd / yyyy, dayOfWeek), но вместо смены дня недели я продолжаю получать среду как день недели, независимо от того, что я помещаю внутрьокно подсказки.Мне просто нужно новое направление, чтобы идти в.Любые ошибки с моим кодом или проспектом я не вижу?Любая помощь будет принята с благодарностью.

public static void main(String [] args)
    {
        Scanner user_input = new Scanner (System.in);

        String returnValue = "";
        int month2=0;
        int day2=0;
        int year2=0;
        GregorianCalendar userbirthday = new GregorianCalendar(year2, month2, day2);
        int userweekday=userbirthday.get(Calendar.DAY_OF_WEEK);




        String usermonth;
        System.out.print ("What month is your birthday?");
        usermonth = user_input.next();

        String userday;
        System.out.print ("What day is your birthday?");
        userday = user_input.next();

        String useryear;
        System.out.print ("What year was your birth?");
        useryear = user_input.next();

        year2 = Integer.parseInt(useryear);
        month2 = Integer.parseInt(usermonth);
        day2 = Integer.parseInt(userday);


        String dayOfTheWeek = "";

        if(month2 == 0){
        System.out.println("That's not a valid birthday! Check your month.");
        System.exit(0);
    } else if (month2>=13){
       System.out.println("That's not a valid birthday! Check your month.");
       System.exit(0);
    }
        if(day2 == 0){
        System.out.println("That's not a valid birthday! Check your day.");
        System.exit(0);
    } else if (day2>=32){
       System.out.println("That's not a valid birthday! Check your day."); 
       System.exit(0);
    }
         if(userweekday == 2){
         dayOfTheWeek= "Mon";           
    } else if (userweekday==3){
        dayOfTheWeek = "Tue";
    } else if (userweekday==4){
        dayOfTheWeek = "Wed";
    } else if (userweekday==5){
        dayOfTheWeek = "Thu";
    } else if (userweekday==6){
        dayOfTheWeek = "Fri";
    } else if (userweekday==7){
        dayOfTheWeek = "Sat";
    } else if (userweekday==1){
        dayOfTheWeek = "Sun";
    }

        String birthdate = month2 + "/" + day2 + "/" + year2 + "," + dayOfTheWeek;



        System.out.println ("Your birthday was" + " " + birthdate);

 }      

1 Ответ

0 голосов
/ 05 октября 2018

Вы делаете вещи в неправильном порядке.Поскольку ваш код в вопросе стоит, вот что произошло:

  1. Вы инициализируете month2, day2 и year2 в 0.
  2. Вы создаете свой GregorianCalendar объект из этих переменных, имеющий значение 0. Это дает вам среду, 31 декабря, год 2 до н.э. (нет года 0, поэтому вы устанавливаете 0 января 1 года до н.э., что равно 31 декабря 2 года до н.э. - сбивает с толку, но для GregorianCalendar это правда).Затем вы берете день недели в userweekday (всегда равный Calendar.WEDNESDAY).
  3. Наконец, в строках year2 = Integer.parseInt(useryear); и т. Д. Вы назначаете пользовательский ввод для переменных.Это не влияет на объект GregorianCalendar, который вы уже создали, и на день недели, уже полученный от этого GregorianCalendar.

Поэтому среда всегда будет напечатана.

КакКроме того, класс GregorianCalendar давно устарел и имеет проблемы с дизайном.Среди других вопросов часто требуется подробный код, который также может быть подвержен ошибкам.И это исчисляется месяцами неожиданным образом.Вместо этого я предлагаю вам использовать LocalDate из java.time, современного Java-API даты и времени.

LocalDate              // Represent a date-only value, without time-of-day, without time zone. 
.of( y , m , d )       // Specify year-month-day, 1-12 for January-December. 
.getDayOfWeek()        // Extract a `DayOfWeek` enum object representing one of seven days of the week. 
.getDisplayName(       // Automatically localize the text of the name of the day of the week. 
    TextStyle.SHORT ,  // Specify how long or abbreviated. 
    Locale.US          // Locale determines the human language and cultural norms used in localizing. 
)

Ссылка: Учебное пособие по Oracle: Дата и время с пояснениямикак пользоваться java.time.

...