2016-10-27 2 views
4

자바 7에서 this code-golf challenge을 시도했습니다. 알지 못하는 사람들을 위해 : 은 가능한 한 적은 바이트로 특정 작업을 완료하는 것입니다. 분명히 자바는 특히 젤리 같은 언어로 이것을하기에 적합한 프로그래밍 언어가 아닙니다. 05AB1E; Pyth; Java에서 75 ~ 300이 될 1-15 바이트의 작업을 완료하는 사람은 누구나 동일하지만 재미로 만 수행합니다. 그냥 참조 1 년 동안 예기치 않은 결과를주는 달력

Here is my current Java 7 answer.

, 나 또한 여기에 복사합니다 : 모든 1 인덱스 개월을 출력

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)); 
    } 
} 

이있는 달의 마지막 날이 월요일 :

내 결과를 링크 된 챌린지 결과와 비교할 때주의해야 할 점은 res 1 학년의 학기가 잘못되었습니다.
이유를 아는 사람이 있습니까? 원래는 Calendar.getInstance()에 잘못된 캘린더가 기본적으로 포함되어 있다고 생각하여 도전 과제에 지정된대로 new GregorianCalendar()으로 변경했습니다. 그러나 이것이 이것이 이미 기본 달력이라는 것을 깨달았습니다.

1 년 동안 잘못된 결과가 나타나는 이유는 무엇입니까?

+1

http://stackoverflow.com/questions/8263220/calendar-set-year-issue –

답변

7

불행히도 GregorianCalendar의 이름이 잘못되었습니다. 실제로는 "줄리안/그레고리력, 그 사이에 스위치 오버가 있습니다."

다행히, 당신은 시간의 시작으로 그 스위치 오버를 설정하여 순수한 그레고리오 력의 역할을하는 데 사용할 수 있습니다 : 그 시점에서

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

, 현재 코드, 당신은 얻을 "4"에 대한 답변 - 꺼짐 별 오류로 인해 12 점을받지 못했습니다 ... < 11이 아닌 < 12을 원합니다.

+0

아, 사실 '그레고리오 캘린더'가 줄리안과 그레고리언이라는 사실을 알았지 만, 실제로 그 원인을 알지 못했습니다. 문제는 아니며'setGregorianChange'에 대해서도 알지 못했습니다. 감사! 저는 GregorianCalendar c = new GregorianCalendar(); c.setGregorianChange (new Date (1L << 63));로 변경했으며, 매력처럼 작동합니다. 추신 : 새로운 아바타? :) –