我如何用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;
}
我有这些函数,但我不知道如何使用它们来计算一年中的每一天
1条答案
按热度按时间liwlm1x91#
使用calendar对象,给定年份初始化2日期:第一个id 1.1。'year'第二个是31.12。'year'。使用检查每个日期的日期
Calendar.get(Calendar.DAY_OF_WEEK)
.在一个大小为7的数组中,记录从1.1“年”到第一个星期一(不含)以及从星期一(含)到31.12“年”(含)的天数。在那个数组中找到最高的索引。