/** * Fig. 8.7: Date.java * * Benito Dannes * 5 March 2017 */ // Date class declaration public class Date { private int month; // 1 - 12 private int day; // 1 - 31 based on month private int year; // any year private static final int[] daysPerMonth = // days in each month {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // Constructor: call checkMonth to confirm proper value for month; // call checkDay to confirm proper value for day public Date (int theMonth, int theDay, int theYear) { month = checkMonth (theMonth); // validate month year = theYear; // could validate year day = checkDay (theDay); // validate day System.out.printf("Date object constructor for data %s\n", this); } // end Date constructor // utility method to confirm proper month value private int checkMonth (int testMonth) { if (testMonth > 0 && testMonth <= 12) // validate month { return testMonth; } else // month is invalid { throw new IllegalArgumentException ("month must be 1-12"); } } // end method checkMonth // utility method to confirm proper day value based on month and year private int checkDay (int testDay) { // check if day in range for month if (testDay > 0 && testDay <= daysPerMonth[month]) { return testDay; } // check for leap year if (month == 2 && testDay == 29 && (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))) { return testDay; } throw new IllegalArgumentException ("day-out-of-range for the specified month and year"); } // end method checkDay // return a String of the form month/day/year public String toString() { return String.format ("%d/%d/%d", month, day, year); } // end method toString } // end class Date