Day Of Week
<< Dot Demo | LabTrailIndex | One Two Ten Game >>
The Algorithms we are using are explained at Wikipeadia
Method 1: Gauss's Algorithm ( Static class method - "Chapter 4 Style")
Here is Gauss' method:
{⚠ $w = (d + \lfloor \frac{13 \cdot m-1}{5} \rfloor + y + \left\lfloor\frac{y}{4}\right\rfloor + \left\lfloor\frac{c}{4}\right\rfloor - 2c) \bmod 7$
}
Where Y: year-1 for January or February, year for the rest of the year d: day (1 to 31) m: shifted month (March=1,...February=12), eg. ((month + 9) % 12) + 1 y: last 2 digits of Y c: first 2 digits of Y w: day of week (0=Sunday,..6=Saturday)
The math notation for the floor function is the partial bracket. For example, {⚠ $\lfloor 5.9 \rfloor = 5$
}. It is very handy that in Java, integer division has a "built-in" floor function.
For those who are just at chapter 4, you haven't seen arrays or "if" statements yet. I have some starter code for the Gaussian method below, so all you have to do is translate the math algorithm into java code:
public class DayOfWeekTester { public static String dow(int month, int day, int year) { String[] weekdays={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; int Y=year; if (month<3) Y--; int d= int m= int y= int c= int w= return weekdays[w]; } public static void main(String[] args) { System.out.println("4/24/1982 falls on "+dow(4,24,1982)); System.out.println("Expected Saturday"); System.out.println("12/25/1960 falls on "+dow(12,25,1960)); System.out.println("Expected Sunday"); } }
Method 2: Look up Algorithm ( Object method with arrays)
DayOfWeekTester2.java
public class DayOfWeekTester2 { public static void main(String[] args) { Date d1=new Date(4,24,1982); System.out.println(d1+" falls on "+d1.dow()); System.out.println("Expected Saturday"); Date d2=new Date(12,25,1960); System.out.println(d2+" falls on "+d2.dow()); System.out.println("Expected Sunday"); } }
Date.java
public class Date { private int month; private int day; private int year; public static String[] weekdays={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; public static int[] centuryTable={4,2,0,6,4,2,0,6,4,2}; public static int[] monthTable={0,0,3,3,6,1,4,6,2,5,0,3,5}; public Date(int m, int d, int y) { month=m; day=d; year=y; } public String toString(){ return month+"/"+day+"/"+year; } public int getCenturyTable() { int c=year/100; return centuryTable[c-17]; } public int getLast2DigitsOfYear() { return year%100; } public int leapYearCount() { return (getLast2DigitsOfYear()/4); } public boolean isLeapYear() { if (year%400==0) return false; //Gregorean adjustment return year%4==0; } public int getMonthTable() { if (isLeapYear() && month==1) return 6; if (isLeapYear() && month==2) return 2; return monthTable[month]; } public String dow() { int sum=getCenturyTable()+getLast2DigitsOfYear()+leapYearCount()+getMonthTable()+day; return weekdays[sum%7]; } }