나는 간단한 달력 클래스를 쓰고있다. operator++
에 과부하를 걸어 다음 달로 일정을 이동하려고합니다. 그러나 다음 달의 시작일을 찾는 알고리즘은 적절하지 않습니다.다음 달의 시작일을 계산하는 알고리즘
calendar calendar::operator ++(int)
{
int hold;
calendar cal = *this;
month++;
if (month > December)
{
month = January;
year++;
if (year == 0)
year++;
}
previousStartDay = startDay;
startDay = nextStartDay;
nextStartDay = findNextStartDay();
return cal;
}
int calendar::findNextStartDay() const
{
int monthLength,
day = startDay;
monthLength = findMonthLength(false);
monthLength -= 28;
day += monthLength;
if (day > Saturday)
day -= Saturday;
return day;
}
1월는 토요일 6 startDay를, previousStartDay, nextStartDay 년, 월, 모든 개인 클래스 변수가
I 2013이 테스트를하는 경우, 일요일 0, 12 월 11, 0으로 정의된다 , 날짜는 3 월까지 정확합니다. 어느 시점에서 다음 시작일을 월요일 대신 화요일로 표시합니다.
int calendar::findNextStartDay() const
{
int monthLength,
day = startDay;
monthLength = findMonthLength(false);
monthLength -= 28;
day -= monthLength;
if (day < Sunday)
day += Saturday;
return day;
}
그러나,이 같은 결과를 제공합니다 :
나는이 시도.편집 :
내가 윤년를 차지하고있다. 내 코드가 findMonthLength()
인 지 확인하십시오.
if ((!(year % 4) && (year % 100)) || !(year % 400))
monthLength = 29;
else
monthLength = 28;
2012 년 3 월의 목요일은 목요일 이었습니까? –
결과가 잘못되었다고합니다. 2 월은 이상한 윤년 규칙이있는 달입니다. hmmm –
죄송합니다. 2013 년 죄송합니다. 지금 수정 중입니다 ... – kennycoc