2012-09-27 10 views
-3

먼저 질문에 답을 얻지 만 코드에 어떤 문제가 있는지 알 수 없으며 다른 사람에게 살펴 보길 원합니다. 그렇게 말하면, 코드가 끔찍한 것처럼 보입니다. 왜냐하면이 모든 것이 한 가지 방법으로 이루어져야하기 때문입니다.Java Assignment, Flawed Logic

public static int dayOfWeek(int year, int month, int day) { 
    int monthCode = 0, centuryCode = 0, numLeapYears = 0, dayOfWeek = 0; 

    int yearDigits = year % 100; 

    if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) { 
     numLeapYears = yearDigits/2 + 1; 
    }else { 
     numLeapYears = yearDigits/2; 
    } 

    if(((year >= 1400) && (year <= 1499)) || ((year >= 1800) && (year <= 1899)) || ((year >= 2200) && (year <= 2299))) { 
     centuryCode = 2; 
    }else if(((year >= 1500) && (year <= 1599)) || ((year >= 1900) && (year <= 1999)) || ((year >= 2300) && (year <= 2399))) { 
     centuryCode = 0; 
    }else if(((year >= 1600) && (year <= 1699)) || ((year >= 2000) && (year <= 2099)) || ((year >= 2400) && (year <= 2499))) { 
     centuryCode = 5; 
    }else if(((year >= 1700) && (year <= 1799)) || ((year >= 2100) && (year <= 2199)) || ((year >= 2500) && (year <= 2599))) { 
     centuryCode = 4; 
    } 

    switch(month) { 
     case 1: monthCode = 0; 
     break; 

     case 2: monthCode = 3; 
     break; 

     case 3: monthCode = 3; 
     break; 

     case 4: monthCode = 6; 
     break; 

     case 5: monthCode = 1; 
     break; 

     case 6: monthCode = 4; 
     break; 

     case 7: monthCode = 6; 
     break; 

     case 8: monthCode = 2; 
     break; 

     case 9: monthCode = 5; 
     break; 

     case 10: monthCode = 0; 
     break; 

     case 11: monthCode = 3; 
     break; 

     case 12: monthCode = 5; 
     break; 
    } 

    dayOfWeek = ((centuryCode + yearDigits + numLeapYears + monthCode + day) % 7); 
    return dayOfWeek; 
}//dayOfWeek 

나는 아직 내 코드에 주석을 귀찮게하지 않은,이 기능의 목적은 숫자 (0, 1로 표시되는 날에 속하는 일 (등 일요일, 월요일을)를 계산하는 것입니다 , 2, etc.) 내 코드는 작동하지만 정확한 숫자를 출력하지 않습니다. 예를 들어, 1920 년 7 월 20 일은 0으로 나오기로되어 있지만, 3 번 코드는 3을 출력합니다.이 방법에 대한 논리에서 결함을 찾을 수없는 것 같습니다.

+1

numLeap이란 무엇입니까? 오늘 날짜 이후로 얼마나 많은 윤년이 생겼습니까? 너 왜 연식/2 야? – Scott

+0

'centuryCode'와'monthCode'를 어떻게 결정 했습니까 ?? –

+0

numLeapYears는 세기가 시작된 이래 윤년의 숫자로 간주됩니다. 편집 : 내 문제였습니다. 실현하도록 도와 주신 덕분입니다. – user123

답변

0

0에서 시작하는 달력 인덱스 월이 표시됩니다. 따라서 1 월의 날짜는 cal.get(Calendar.MONTH) == 0입니다.

그렇다면 monthCode이 나타내는 내용에 대한 설명을 제공하지 않았기 때문에 어떤 유형의 도움도 제공하기가 어렵습니다.