猿问

获取一年中的第 n 天

对于家庭作业,我想在 Jave 程序中计算日期在一年中的第 n 天。


因此,用户给出一个日期,然后它会告诉你这是一年中的第几天。所以 2019 年 1 月 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;

    }

我知道这是不对的,所以我希望有人能帮助我。我认为 for 循环更好,但我不知道如何。第一行,static int dayNumberInYear(int day, Month month, int year)我不允许更改它,所以它需要是第一行。 我不允许使用 java 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;

        }

      }


杨魅力
浏览 119回答 3
3回答

一只斗牛犬

看起来您想要的想法是一种按月递减的递归方法。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;      }}请注意,在这种递归方法中,基本情况是现在是一月,我们只需返回一月的当天。否则,我们将添加当前月份的某一天,然后添加之前每个月的所有天数。它也可以作为 for 循环来完成。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;}

Smart猫小萌

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;    }}

侃侃无极

就这么简单。public static String dayNumberInYear(String sDate) {        //sDate formate 2023-02-20, you can change local date format        LocalDate localDate = LocalDate.parse(sDate);        int dayOfYear = localDate.getDayOfYear();        return dayOfYear > 99 ? "" + dayOfYear : dayOfYear > 9 ? "0" + dayOfYear : "00" + dayOfYear;    }
随时随地看视频慕课网APP

相关分类

Java
我要回答