Получите n-й день года - PullRequest
       64

Получите n-й день года

0 голосов
/ 27 сентября 2019

Для домашнего задания я хочу вычислить n-е число дня в году в программе Jave.

Итак, пользователь задает дату, а затем сообщает, сколько это дней в году.Итак, 1 января 2019 года, это день 1. У меня уже есть функция, которая дает количество дней в месяце.Эта функция также учитывает високосные годы.Поэтому мне нужна только функция, которая возвращает номер дня в году.То, что я думал, я должен был сделать, но это не работает, потому что я не могу уменьшить месяц:

    static int dayNumberInYear(int day, Month month, int year)
    {
      while(month!=Month.JANUARY)
      {
        int dayNumberInYear=dayNumberInYear+numberOfDaysInMonth(year,month);
        Month month = month(-1);
      }
    return dayNumberInYear(day,month,year)+day;
    }

Я знаю, что это неправильно, поэтому я надеюсь, что кто-то может мне помочь.Я думаю, что цикл лучше, но я не знаю как.И первая строка, static int dayNumberInYear(int day, Month month, int year), мне не разрешено это менять, поэтому это должна быть первая строка. Мне не разрешено использовать классы манипулирования датами JRE, такие как Календарь, Дата и т. Д.!

Я новичок, поэтому, пожалуйста, я надеюсь, что кто-то может мне помочь.Вот код, который у меня есть:

    package ;

    import java.util.Scanner;

    public class Easter
    {
      public static void main(String[] arguments)
      {
        Scanner scanner=new Scanner(System.in);
        System.out.println("Enter the day month and year with spaces in between:");
        int day=scanner.nextInt();
        int monthNumber=scanner.nextInt();
        Month month=Month.month(monthNumber);
        int year=scanner.nextInt();
        System.out.println("The month "+month+" has "+numberOfDaysInMonth(year,month)+" days in year "+year);

        System.out.println("The number of this date in a year:"+dayNumberInYear(day,month,year));

        scanner.close();
      }
      static boolean isLeapYear(int year)
      {
        if(year%100==0)
          year=year/100;
        if(year%4==0)
          return true;
        return false;
      }

      static int numberOfDaysInMonth(int year, Month month)
      {
        switch(month)
        {
          case APRIL:
          case JUNE:
          case SEPTEMBER:
          case NOVEMBER:
            return 30;
          case FEBRUARY:
            if(isLeapYear(year))
              return 29;
            return 28;
          default:
            return 31;
        }
      }

      static int dayNumberInYear(int day, Month month, int year)
      {
        while(month!=Month.JANUARY)
        {
          int dayNumberInYear=dayNumberInYear+numberOfDaysInMonth(year,month);
          Month month = month(-1);
        }
        return dayNumberInYear(day,month,year)+day;
      }
    }

Уже есть готовый класс Month.java: package;

    public enum Month {
      JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;

      public int number()
      {
        return ordinal()+1;
      }

      public static Month month(int number)
      {
        return values()[number-1];
      }
    }

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Похоже, идея, к которой вы стремитесь, - это рекурсивный подход, который уменьшается на месяц.

static int dayNumberInYear(int day, Month month, int year)
    {
      if(!month.equals(Month.JANUARY)) {
        return day + dayNumberInYear(numberOfDaysInMonth(month.minus(1), year), month.minus(1), year);
      } else {
        return day;
      }
}

Обратите внимание, что в этом рекурсивном подходе базовый случай - это январь, а мы просто возвращаем текущий день в январе.В противном случае мы добавляем день текущего месяца, а затем все дни в каждом предыдущем месяце.

Это также можно сделать в виде цикла.

static int dayNumberInYearByLoop(int day, Month month, int year) {
  int totalDays = day;
  for (int i = month.getValue();i>1;i--) {
    totalDays += numberOfDaysInMonth(Month.of(i), year);
  }
  return totalDays;
}

Вы можете возиться смой код здесь: https://repl.it/repls/ConcreteDarkgreenSequence

0 голосов
/ 27 сентября 2019
package SO;

import java.time.Month;

public class test {
    //below array contain number of total days in that month(non leap year).
    static int arrTotal[] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };

    public static void main(String[] args) {

        System.out.println(dayNumberInYear(3, Month.MARCH, 2019));
    }

    static int dayNumberInYear(int day, Month month, int year) {
        int dayNumberInYear = day + numberOfDaysInMonth(year, month);

        return dayNumberInYear;
    }

    private static int numberOfDaysInMonth(int year, Month month) {
        int add = 0;

        if (year % 4 == 0)
            add++;

        int a = month.getValue();
        return arrTotal[(a - 2)] + add;
    }
}
...