Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 有没有公式来计算哪一天是哪一天?我被Euler计划困住了_Java_Algorithm_Math - Fatal编程技术网

Java 有没有公式来计算哪一天是哪一天?我被Euler计划困住了

Java 有没有公式来计算哪一天是哪一天?我被Euler计划困住了,java,algorithm,math,Java,Algorithm,Math,我正在做Euler 19项目。以下是美国: 你会得到以下信息,但你可能更愿意自己做一些研究 1900年1月1日是星期一。 三十天是九月, 四月、六月和十一月。 其余的都有三十一个, 仅二月一日, 哪一个有二十八个,无论晴雨。 闰年是29岁。 闰年发生在任何可以被4整除的年份,但除非它可以被400整除,否则不会发生在一个世纪。 在二十世纪(1901年1月1日至2000年12月31日),有多少个星期日是在一个月的第一天 我在网上搜索了一些计算星期几的公式。我发现这本书很出色。W=[C/4]-2C+y

我正在做Euler 19项目。以下是美国:

你会得到以下信息,但你可能更愿意自己做一些研究

1900年1月1日是星期一。 三十天是九月, 四月、六月和十一月。 其余的都有三十一个, 仅二月一日, 哪一个有二十八个,无论晴雨。 闰年是29岁。 闰年发生在任何可以被4整除的年份,但除非它可以被400整除,否则不会发生在一个世纪。 在二十世纪(1901年1月1日至2000年12月31日),有多少个星期日是在一个月的第一天

我在网上搜索了一些计算星期几的公式。我发现这本书很出色。W=[C/4]-2C+y+[y/4]+[13*(M+1)/5]+d-1。(C是世纪+1,y是一年中的最后两个数字) 但是,当我检查1900.01.01时,结果是错误的,应该是星期一,但根据公式,是6(即星期六)

我已经检查了很多日期,几乎所有的都适合这个配方。但与之不符的天数仍然更少。 我的Java代码如下所示:

package number;

public class CountingSundays {
    public static int calculateWeek(int year, int month, int date){
        int c = year/100;
        int y = year%100;
        int w = c/4-2*c+y+y/4+13*(month+1)/5+date-1;
        w = (w%7 + 7)%7;
        return w;
    }
    public static void main(String[] args) {
//      int w = calculateWeek(1900, 01, 01);
//      System.out.println(w);
        int count = 0;
        for(int i = 1901; i <= 2000; i++)
            for(int j = 1; j <= 12; j++)
                if(calculateWeek(i, j, 01) == 0)
                    count++;
        System.out.println(count);
    }
}
包装编号;
公共课计数星期日{
公共静态int calculateWeek(int年、int月、int日){
int c=年份/100;
int y=年份%100;
int w=c/4-2*c+y+y/4+13*(月+1)/5+日期-1;
w=(w%7+7)%7;
返回w;
}
公共静态void main(字符串[]args){
//int w=CalculateWek(1900,01,01);
//系统输出打印LN(w);
整数计数=0;

对于(inti=1901;i如果你指的是公历和英语,那么

GregorianCalendar gc = new GregorianCalendar(1, Calendar.JANUARY, 1900);
System.out.println(gc.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH));
输出

Monday

etc

如果你指的是公历和英语,那么

GregorianCalendar gc = new GregorianCalendar(1, Calendar.JANUARY, 1900);
System.out.println(gc.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH));
输出

Monday

所以,如果你想使用这个公式,你可能应该相应地调整你的输入值,也就是说,添加这样的东西

if (month <= 2) {
    month += 12;
    year--;
}
if(月

所以,如果你想使用这个公式,你可能应该相应地调整你的输入值,也就是说,添加这样的东西

if (month <= 2) {
    month += 12;
    year--;
}

if(month您可以循环查看指定年份范围内的每个月,并在日历对象上设置日期,然后读取每个月第一个星期的日期

import java.util.Calendar;
import java.util.GregorianCalendar;

public class CountingSundays {

    public static void main(String[] args) {
        GregorianCalendar gc = new GregorianCalendar(1, Calendar.JANUARY, 1900);

        int count = 0;
        for (int i = 1901; i < 2001; i++) {
            gc.set(GregorianCalendar.YEAR, i);
            for (int j = 0; j < 12; j++) {
                gc.set(GregorianCalendar.MONTH, j);
                if (gc.get(GregorianCalendar.DAY_OF_WEEK) == GregorianCalendar.SUNDAY) {
                    count++;
                }
            }
        }
        System.out.println(count);
    }
}
import java.util.Calendar;
导入java.util.GregorianCalendar;
公共课计数星期日{
公共静态void main(字符串[]args){
GregorianCalendar gc=新的GregorianCalendar(1900年1月1日日历);
整数计数=0;
对于(int i=1901;i<2001;i++){
gc.set(Gregorianalendar.YEAR,i);
对于(int j=0;j<12;j++){
gc.set(Gregorianalendar.MONTH,j);
if(gc.get(GregorianCalendar.DAY,OF,OF,OF,WEEK)==GregorianCalendar.SUNDAY){
计数++;
}
}
}
系统输出打印项次(计数);
}
}

请注意,年和月在循环中发生变化,但日期(月的一天)保持设置为1。

您可以在指定的年范围内循环每个月,并在日历对象上设置日期,然后读取每个月的第一个星期的一天

import java.util.Calendar;
import java.util.GregorianCalendar;

public class CountingSundays {

    public static void main(String[] args) {
        GregorianCalendar gc = new GregorianCalendar(1, Calendar.JANUARY, 1900);

        int count = 0;
        for (int i = 1901; i < 2001; i++) {
            gc.set(GregorianCalendar.YEAR, i);
            for (int j = 0; j < 12; j++) {
                gc.set(GregorianCalendar.MONTH, j);
                if (gc.get(GregorianCalendar.DAY_OF_WEEK) == GregorianCalendar.SUNDAY) {
                    count++;
                }
            }
        }
        System.out.println(count);
    }
}
import java.util.Calendar;
导入java.util.GregorianCalendar;
公共课计数星期日{
公共静态void main(字符串[]args){
GregorianCalendar gc=新的GregorianCalendar(1900年1月1日日历);
整数计数=0;
对于(int i=1901;i<2001;i++){
gc.set(Gregorianalendar.YEAR,i);
对于(int j=0;j<12;j++){
gc.set(Gregorianalendar.MONTH,j);
if(gc.get(GregorianCalendar.DAY,OF,OF,OF,WEEK)==GregorianCalendar.SUNDAY){
计数++;
}
}
}
系统输出打印项次(计数);
}
}

请注意,年和月在循环中发生变化,但日期(月日)保持设置为1。

明白了!非常感谢!明白了!非常感谢!