Java - месяцы и дни? - PullRequest
       2

Java - месяцы и дни?

3 голосов
/ 08 сентября 2011

Во-первых, я искал, чтобы найти что-то близкое к моему вопросу, но я не мог ничего найти.Я не очень хороший программист, я только начал немного с ним играть, и мой интерес к нему сильно растет.

Я думал, смогу ли я сделать базовую программу с базовым и понятным языком, с месячным и дневным «калькулятором».

Как если бы у меня был отпечаток sysout, который говорит: Write month number, и я наберу 11, а затем напишу номер дня в месяце, и кто-то напишет 27, он скажет правильную дату!

Но если он спросит меня о месяце, и янаберите 6, как June, и я напишу в 31 как дни, которые будут напечатаны, где будет сказано: Month 6 doesn't have day 31.

Я хочу, чтобы все было просто, чтобы я понимал базовый язык не так уж сложно!Я просто новичок!

Спасибо за помощь.

Ответы [ 5 ]

3 голосов
/ 08 сентября 2011

Если вы просто хотите выполнить работу, я бы посоветовал вам взглянуть на Calendar API или, возможно, JodaTime .

Если выВы более заинтересованы в изучении того, как это сделать самостоятельно, вот один совет для подхода:

Жесткий код массива, подобного

int[] daysInMonths = { 31, 27, 31, ... };

, и затем проверка с помощьючто-то вроде следующего:

// Get month and day from user
Scanner s = new Scanner(System.in);
int month = s.nextInt();
int day = s.nextInt();

int monthIndex = month - 1;     // since array indices are 0-based

if (1 <= day && day <= daysInMonths[monthIndex])
    print ok
else
    print does not exist
1 голос
/ 08 сентября 2011

Эта программа должна помочь вам ...

import java.util.*;

class Date {
    public static void main(String[] args) {
        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        System.out.print("Enter a month number and a day number (separate using \';\':_");
        Scanner sc = new Scanner(System.in).useDelimiter(";");
        int month = sc.nextInt();
        int day = sc.nextInt();
        sc.close();
        System.out.println((day == days[month - 1]) ? "Date correct!" : "Date incorrect: Month " + month + " does not have day " + day);
    }
}
0 голосов
/ 21 июня 2017

ТЛ; др

Month.of( 6 ).maxLength()

java.time

Современный подход использует классы java.time, которые вытесняют старые классы Date / Calendar.

Используйте перечисление Month.

Month month = Month.of( 6 ) ;  // Months numbered sanely, 1-12 for January-December.
if( dayOfMonthInput > month.maxLength() ) {
    … bad input
}

Конечно, в феврале последний день месяца зависит от високосного года. Так что если вы хотите быть точным, вам нужно использовать YearMonth.

YearMonth ym = YearMonth.of( 2017 , 2 ) ;
if( dayOfMonthInput > ym.lengthOfMonth() ) {
    … bad input
}

О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Где взять классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 08 сентября 2011

Использование функциональности класса Calendar - гораздо лучший способ сделать это.

    int day = 31;
    int month = 6; // JULY

    Calendar calendar = Calendar.getInstance();
    if(month < calendar.getActualMinimum(Calendar.MONTH) 
            || month > calendar.getActualMaximum(Calendar.MONTH))
        System.out.println("Error - invalid month");
    else 
    {
        calendar.set(Calendar.MONTH, month);
        if (day <  calendar.getActualMinimum(Calendar.DAY_OF_MONTH) 
                || day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH))
        {
            System.out.println("Error - invalid day for month");
        }
        else
        {
            System.out.println("Date is correct");
        }
    }
}

Все, что вам нужно знать, это то, что Календарь в настоящее время рассматривает январь как месяц 0.

0 голосов
/ 08 сентября 2011

в классе Дата, первый месяц января "0", ноль.Итак, вы думаете, что июнь, и вы пишете 6, но должно быть 5;как

January 0
February 1
March 2
April 3
May 4
June 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...