为了账号安全,请及时绑定邮箱和手机立即绑定

获取一年中的第 n 天

获取一年中的第 n 天

杨魅力 2023-09-06 15:50:42
对于家庭作业,我想在 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;        }      }
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

看起来您想要的想法是一种按月递减的递归方法。


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;

}

查看完整回答
反对 回复 2023-09-06
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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;

    }

}


查看完整回答
反对 回复 2023-09-06
?
侃侃无极

TA贡献2051条经验 获得超10个赞

就这么简单。


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;


    }


查看完整回答
反对 回复 2023-09-06
  • 3 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信