java,如何计算公历年中最频繁的一天(1583年到4000年之间的年份)?
我如何用Java构建一个算法,当给定一年时,它将找到该特定年份一周中最频繁的一天 先决条件:java,如何计算公历年中最频繁的一天(1583年到4000年之间的年份)?,java,algorithm,calendar,Java,Algorithm,Calendar,我如何用Java构建一个算法,当给定一年时,它将找到该特定年份一周中最频繁的一天 先决条件: 本周从周一开始 年份介于1583年和4000年之间 日历是公历 示例: mostFrequentDays(2427) => {"Friday"} mostFrequentDays(2185) => {"Saturday"} mostFrequentDays(2860) => {"Thursday", "Frida
- 本周从周一开始
- 年份介于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;
}
public静态字符串[]mostFrequentDays(整数年){
字符串[]天=新字符串[];
回归日;
}
公共静态布尔值isGregorianLeapYear(整数年){
布尔isLeap=false;
如果(年份%4==0)isLeap=true;
如果(年份%100==0)isLeap=false;
如果(年份%400==0)isLeap=true;
返回isLeap;
}
公共静态整年整日(整年,整年,整年){
int c=0;
对于(int i=1;i使用对象,给定一年初始2个日期:第一个id为1.1。'year'第二个id为31.12。'year'。使用Calendar.get(Calendar.day of周)
检查每个日期的日期
在大小为7的数组中,跟踪从1.1“年”到第一个星期一(不含)以及从星期一(含)到31.12“年”(含)的天数。找到该数组中的最高指数。找到一年中1月1日是一周中的哪一天。从第一个星期一开始每天数一次。然后计算整个星期,每周每天加一次。然后计算最后一个部分的最后剩余天数,直到12月31日。基本上,系统地解决问题。我几乎完成了上次您发布同一个问题时我的答案。然后您删除了该问题,我无法发布我的答案。现在它丢失了。您是否正在编写并使用自己的方法作为练习?如果是,这是一个很好的练习。对于生产代码,您永远不会也不应该这样做。从中使用LocalDate
更简单、更可靠。以及是的,它遵循公历。哦,我不知道它会这么做。真的很抱歉:-(此日历是否遵循公历时间?@rokcrow使用子类我当然建议您不要使用Calendar
。该类设计糟糕且过时很久。请改用LocalDate
from。此日历是否遵循公历时间?不一定。如果可以,它遵循提供的区域设置的日历,或者默认的l。)如果不指定JVM的ocale。我尝试了使用ja JP语言环境,2020年和您提到的日期的Calendar
。我得到了一周中的第4天和第5天,我认为是指星期三和星期四。然后我使用了第4个语言环境,两个日期都得到了4天。不,您的建议并不总是有效。在一些日历中,我没有31天第12个月。在某些日历中,一周的长度不同于7天。