java,如何计算公历年中最频繁的一天(1583年到4000年之间的年份)?

b5buobof  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(298)

我如何用java构建一个算法,当给定一年时,它将从该特定年份中找到一周中最频繁的一天?
前提条件:
星期一开始。
年份在1583年到4000年之间。
公历是公历。
示例:

mostFrequentDays(2427) => {"Friday"}
mostFrequentDays(2185) => {"Saturday"}
mostFrequentDays(2860) => {"Thursday", "Friday"}

给定的是一个介于1583和4000之间的整数,该函数以字符串数组的形式返回最频繁的一天

public static String[] mostFrequentDays(int year) {
             String[] day= new String[];
             return day;  
  }
public static boolean isGregorianLeapYear(int year) {
              boolean isLeap = false;
              if (year%4==0) isLeap = true;
              if (year%100==0) isLeap = false;
              if (year%400==0) isLeap = true;
              return isLeap;
           }
         public static int dayOfYear(int y, int m, int d) {
              int c = 0;
              for (int i=1; i<m; i++) { // Number of months passed
                 c = c + daysInGregorianMonth(y,i);
              }
              c = c + d;
              return c;      
           }
           public static int daysInGregorianMonth(int y, int m) {
              int d = (int)((m-1)/7);
              if (m==2 && isGregorianLeapYear(y)) d++;
              return d;      
           }
         public static int dayOfWeek(int y, int m, int d) {
              int w = 1; // 01-Jan-0001 is Monday, so base is Sunday
              y = (y-1)%400 + 1; // Gregorian calendar cycle is 400 years
              int ly = (y-1)/4; // Leap years passed
              ly = ly - (y-1)/100; // Adjustment
              ly = ly + (y-1)/400; // Adjustment
              int ry = y - 1 - ly; // Regular years passed
              w = w + ry; // Regular year has one extra week day
              w = w + 2*ly; // Leap year has two extra week days
              w = w + dayOfYear(y,m,d); 
              w = (w-1)%7 + 1;
              return w;
           }

我有这些函数,但我不知道如何使用它们来计算一年中的每一天

liwlm1x9

liwlm1x91#

使用calendar对象,给定年份初始化2日期:第一个id 1.1。'year'第二个是31.12。'year'。使用检查每个日期的日期 Calendar.get(Calendar.DAY_OF_WEEK) .
在一个大小为7的数组中,记录从1.1“年”到第一个星期一(不含)以及从星期一(含)到31.12“年”(含)的天数。在那个数组中找到最高的索引。

相关问题