Расчет даты Назначение Java

Определите метод Java, который принимает три целых значения (месяц, день и год) в качестве аргументов и возвращает номер этого дня в году (целое число от 1 до 365 или 366 для високосных лет). Ваш метод должен иметь следующий заголовок: public static int dayNum (int month, int day, int year) Чтобы вычислить номер дня для заданной даты, используйте следующую формулу:

а. dayNum = 31 * (месяц - 1) + день

б. Если месяц после февраля (2), то вычтите (4 * месяц + 23)/10 из числа дня.

в. Если год високосный и дата после 29 февраля, добавьте 1 к dayNum.

Например, рассмотрим 2 марта 2000 года. dayNum равно 31 * (3 - 1) + 2, или 64. Март идет после февраля, поэтому мы вычитаем (4 * 3 - 23)/10, или 35/10, или 3 ( не забудьте использовать целочисленное деление, которое усекает остаток). Это дает нам номер дня 61. Однако 2000 год был високосным, и 2 марта следует за 29 февраля, поэтому мы добавляем 1 к dayNum. Наш окончательный ответ говорит нам, что 2 марта 2000 года был 62-й день года.

Я продолжаю получать неточные результаты, когда тестирую этот метод, который я сделал. Если я ввожу 2 марта 2000 года, он сообщает мне, что это 64-й день, а если я вхожу 29 февраля, он сообщает мне, что это 57-й день. Любые изменения в моем коде, которые работают со спецификациями задания, и объяснение того, что я сделал неправильно, будут высоко оценены.

public static int dayNum (int month, int day, int year)
{
    int dayNum;
    dayNum = 31 * (month - 1) + day;

    if(month==2)
    {
        dayNum = dayNum - (4 * month + 23)/10;

        if(((year % 4==0 || year % 400 == 0 && (year % 100 != 0)))&&(month>2))
        {
            dayNum= dayNum + 1;

        }


    }
    return dayNum;

person n94pro    schedule 01.05.2014    source источник
comment
Март наступает после февраля, но ваша выписка if проверяет только февраль?   -  person MadProgrammer    schedule 01.05.2014
comment
Я не уверен, поможет ли это, но части b имеют (4 * 3 + 23), а после c у вас есть (4 * 3-23)   -  person michaelp    schedule 01.05.2014
comment
Это не причина сбоя, но ваше выражение високосного года неверно.   -  person Dawood ibn Kareem    schedule 01.05.2014
comment
Должно быть year % 400==0 || year % 4 == 0 && year % 100 != 0 - вставьте квадратные скобки (почти) везде, где хотите, чтобы сделать это наиболее читабельным для вас.   -  person Dawood ibn Kareem    schedule 02.05.2014


Ответы (1)


"Март наступает после февраля", но ваше утверждение if проверяет только февраль?

if(month==2)

Вам нужно проверить все месяцы, выпадающие после февраля.

if(month >= 3)

or

if(month > 2)
person MadProgrammer    schedule 01.05.2014
comment
Номер месяца после февраля. Должно быть if(month > 2) - person Dawood ibn Kareem; 01.05.2014