2016-11-30 10 views
-2

그레고리력의 특정 연도가 윤년인지 알려주는 코드를 작성해야합니다. 그러나 나는 매년이 코드가 작동 할 지 확신하지 못합니다.이 코드가 윤년인지를 증명하는 것입니다.

코드를 붙여 넣기 전에 그레고리력 연도를 윤년으로 만드는 것이 무엇인지 알아야합니다. 모듈로 4를 0으로 설정하면 윤년입니다. 연도가 % 년이면 윤년입니다. 4 = 0이고 연도 % 100 = 0이면 그렇지 않습니다. 마지막으로 연도 % 4 = 0이고 연도 % 100 = 0이고 연도 % 400 = 0 인 경우 다음과 같습니다.

이 여기에 코드입니다 :

public static boolean isLeapYearGregorian(int year) { 
    if ((year % 4 == 0) && (year % 100 != 0) || (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) { 
     return true; 
    } 
    else { 
     return false; 
    } 

} 

감사

기록을 위해
+0

무엇이 문제인가? – XtremeBaumer

+0

관찰 :'(연도 % 4 == 0) && (연도 % 100 == 0) && (연도 % 400 == 0) '단편을 (연도 % 400 == 0)' 400의 배수는 반드시 4와 100의 배수). – khelwood

+1

몇 년 더 확인하십시오. 2016 년에 작동합니까? 2017? 1600? 1601? 테스트하는 케이스가 많을수록 자신감이 커질 수 있습니다.이것은 단위 테스트의 본질입니다. 아직도 확실하지 않다면, 왜 자신에게 물어보십시오. 그리고 의심이 합리적이라면, 더 많은 테스트 케이스를 마련하여 문제를 해결하십시오. –

답변

1

, 코드가 단순히

public static boolean isLeapYearGregorian(int year) { 
    return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0); 
} 

그러나 가까운 영업 이익의 코드로 시작을 위해 쓸 수있는, 다음과 같이 시작하겠습니다.

public static boolean isLeapYearGregorian(int year) { 
    return (year % 4 == 0) && (year % 100 != 0) || (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0); 
} 

위의 경우 (&&)와 ors (||)가 같은 레벨에 있고 차이가 있기 때문에 operator precedence in Java을 알아야합니다. 짧은 대답 : AND는 OR 앞에옵니다.

  • (년 % 4 == 0) AND (년 % 100! = 0)
  • OR
  • (년 % 4 == 0)

    이제 논리로 표시 될 수있다 AND (년 %는 100 == 0) 및 (400 % 년 == 0)이다

말하고 :

  • (년 디비 4에 의해 BLE) 및
  • 또는
  • 4로 나누어 (년) 및 (100)로 나누어 (년) 및 (400)로 나누어 (년)

이제 비교할 수)에 100 (년 나눌 수 없습니다 definition of a Gregorian calendar leap year의 의사와 논리 :

if (year is not divisible by 4) then (it is a common year) 
else if (year is not divisible by 100) then (it is a leap year) 
else if (year is not divisible by 400) then (it is a common year) 
else (it is a leap year) 

여기에서 위키 백과에 의해 정의 된대로, 그 예 코드가 올바르게 식별 윤년 우리는 당신의 질문의 코드에서 추출 된 논리에 비교하고 확인하는 간단.

비교가 "똑 바르지 않은"것처럼 보이면 truth tables에 의지 할 수 있으며 두 논리적 명령문이 동일하다는 것을 철저히 증명할 수 있습니다.

truth table of leap year identification