Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java,如何计算公历年中最频繁的一天(1583年到4000年之间的年份)?_Java_Algorithm_Calendar - Fatal编程技术网

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

java,如何计算公历年中最频繁的一天(1583年到4000年之间的年份)?,java,algorithm,calendar,Java,Algorithm,Calendar,我如何用Java构建一个算法,当给定一年时,它将找到该特定年份一周中最频繁的一天 先决条件: 本周从周一开始 年份介于1583年和4000年之间 日历是公历 示例: mostFrequentDays(2427) => {"Friday"} mostFrequentDays(2185) => {"Saturday"} mostFrequentDays(2860) => {"Thursday", "Frida

我如何用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;
           }
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天。