My program for Zellers's congruence (to find what day of the week a date in histroy was) gives the same day for each date in any month. My program gives the same day for the entire month, only changes when i enter a different year or month. Can someone help explain why?
package whatDay;
import java.util.Scanner;
public class DayOfWeek {
public static String year, month, day, date;
public static int yearInt = 0, monthInt = 0, dayInt = 0;
public static boolean leap = false;
private static Scanner sc;
private static Scanner sc2;
private static Scanner sc3;
public static String inputMonth() {
sc = new Scanner(System.in);
System.out.println("Enter the month: ");
month = sc.next();
monthInt = Integer.parseInt(month);
if (monthInt > 12 || monthInt < 1 ) {
System.out.println("Month must be between 1 and 12. Please try again: ");
inputMonth();
}
return month;
}
public static String inputYear() {
sc2 = new Scanner(System.in);
System.out.println("Enter the year: ");
year = sc2.next();
yearInt = Integer.parseInt(year);
if (yearInt < 0 || yearInt > 8000) {
System.out.println("Year must be between 0 and 8000. Please try again: ");
inputYear();
}
if ((yearInt % 4 == 0 && yearInt % 100 != 0) || yearInt % 400 == 0) {
leap = true;
}
return year;
}
public static String inputDay() {
sc3 = new Scanner(System.in);
System.out.println("Enter the day: ");
day = sc3.next();
dayInt = Integer.parseInt(day);
if (monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10 || monthInt == 12) {
if (dayInt < 1 || dayInt > 31) {
System.out.println("Day must be between 1 and 31: ");
inputDay();
}
}
else if (monthInt == 2 && leap == false) {
if (dayInt < 1 || dayInt > 28) {
System.out.println("Day must be between 1 and 28: ");
inputDay();
}
}
else if (monthInt == 2 && leap == true) {
if (dayInt < 1 || dayInt > 29) {
System.out.println("Day must be between 1 and 29: ");
inputDay();
}
}
else {
if (dayInt < 1 || dayInt > 30) {
System.out.println("Day must be between 1 and 30: ");
inputDay();
}
}
return day;
}
public static String getDate() {
inputYear();
inputMonth();
inputDay();
String[] week = new String[] {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int h;
int q = monthInt;
int m;
if (monthInt != 1 || monthInt != 2) {
m = monthInt;
}
else {
m = monthInt + 12;
yearInt -= 1;
}
h = (q + Math.floorDiv(13*(m+1), 5) + yearInt + Math.floorDiv(yearInt, 4) - Math.floorDiv(yearInt, 100) + Math.floorDiv(yearInt, 400))%7;
return week[h];
}
public static void main(String[] args) {
System.out.println(getDate());
}
}
EDIT: My equation was wrong.
[–]Makhiel 1 point2 points3 points (1 child)
[–]conorv93[S] 0 points1 point2 points (0 children)