I’m doing this programming exercise out of a textbook where we are given an algorithm for calculating the day of the week called Zeller’s congruence. Well do you think I can get the same output as the sample run in the textbook! They go with year 2002, month 3 and day of month 26. The sample reads back Tuesday. I’ve made several hours of mods and rewrites and can’t get anywhere near Tuesday!
It’s page 133 of Java Comprehensive textbook 8e if anyone has it… I’m a beginner so constructive feedback most welcome!
Your advice would be appreciated:
import java.util.Scanner;
public class DayOfTheWeek {
public static void main(String[] args) {
// Set up the scanner...
Scanner input = new Scanner(System.in);
// Set up the day's of the week with 0 being Sat as per algorithm.
final String[] DAY_OF_WEEK = {"Saturday", "Sunday", "Monday",
"Tuesday", "Wednesday", "Thursday", "Friday"};
// Get the year
System.out.print("Enter the year (e.g., 2002): ");
int year = input.nextInt();
// Get the month
System.out.print("Enter the month 1-12: ");
int month = input.nextInt();
// Get the day
System.out.print("Enter the day 1-31: ");
int day = input.nextInt();
// According to the algorithm Jan is 13 & Feb 14...
if (month == 1) month = 13;
else if (month == 2) month = 14;
// j Is the century.
int j = year / 100;
// k Is the year of the century.
int k = year % 100 ;
// Calculate
double h = (month + ((26*(month + 1)) / 10) + k + (k / 4) +
(j / 4) + (5 * j)) % 7;
// Cast answer back to integer to get result from array
int ans = (int)h;
// Print result
System.out.println("Day of the week is: " + DAY_OF_WEEK[ans]);
}
}
It looks like this line of code is wrong:
The formula has the day added to the first expression, not the month. So it should look like this: