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];
	}
}