gpt4 book ai didi

java - 日历给出了第 1 年的意外结果

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:10 25 4
gpt4 key购买 nike

我试着做 this code-golf challenge在 Java 7 中。只为任何不知道的人:就是用尽可能少的字节完成某个任务。显然,Java 不是一种合适的编程语言来执行此操作,尤其是对于像 Jelly 这样的语言; 05AB1E; python ;以及以 1-15 字节完成任务的类似人员,这在 Java 中为 75-300,但我这样做只是为了好玩。

Here is my current Java 7 answer.仅供引用,我也复制在这里:

import java.util.*;String c(int y){String r="";Calendar c=Calendar.getInstance();c.set(1,y);c.set(2,0);for(int i=0;i++<11;c.add(2,1)){c.set(5,c.getActualMaximum(5));if(c.get(7)==2)r+=i+" ";}return r;}

import java.util.*;
class M{
static String c(int year){
String r = "";
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 0);
for(int i = 0; i++ < 11; calendar.add(Calendar.MONTH, 1)){
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
if(calendar.get(Calendar.DAY_OF_WEEK) == 2){
r += i+" ";
}
}
return r;
}

public static void main(String[] a){
System.out.println(c(1));
System.out.println(c(297));
System.out.println(c(1776));
System.out.println(c(2000));
System.out.println(c(2016));
System.out.println(c(3385));
}
}

它输出所有以 1 为索引的月份,其中该月的最后一天是星期一:

1 2 10 **
5
9
1 7
2 10
1 2 10

当您将我的结果与链接挑战中的结果进行比较时,您可能已经注意到,第 1 年的结果不正确。
有谁知道为什么?最初我认为 Calendar.getInstance() 的默认日历不正确,所以我将其更改为挑战中指定的 new GregorianCalendar()。但我意识到这已经是默认日历了。

为什么第 1 年的结果不正确?

最佳答案

不幸的是,GregorianCalendar名字不好。它实际上是“儒略历/公历,在它们之间进行切换。”

幸运的是,您可以通过将切换设置为在时间开始时将其用作纯公历:

GregorianCalendar calendar = new GregorianCalendar();
calendar.setGregorianChange(new Date(Long.MIN_VALUE));

此时,使用您当前的代码,您得到的答案仅为“4”——由于差一错误,它没有选择 12...您需要 < 12而不是 < 11 .

关于java - 日历给出了第 1 年的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40280182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com