First off, I know that you guys dislike it when questions like these are asked however I’m unable to see what’s wrong with my code and would like someone to look it over. With that said, I know my code looks terrible and that’s because this has to be all done in one method.
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
I haven’t bothered to comment my code yet, the purpose of this function is to calculate the date of which a day falls on (Sunday, Monday, etc.) represented by a number (0, 1, 2, etc.) My code works, however it doesn’t output the correct number. For instance 7/20/1969 is supposed to come out as 0, but my code outputs 3. I can’t seem to find the flaw in my logic for this method.
Your switch on the month looks off – calendar indexes months starting at 0. Therefore
cal.get(Calendar.MONTH) == 0for dates in January.With that said, you’ve provided no explanation for what
monthCodeshould represent, which makes it really hard to offer any type of help.