go to previous page   go to home page   go to next page

Answer:

See below.


32 Days hath September

public class Month
{
  // instance variables
  private int   month;  // 1 == January
  private int   year;   // year as an int, eg 2017
  private int   daysInMonth;   // number of days in this month
  
  // temperature data
  private int[] temp;    // day 1 in temp[1]
  private boolean[] valid;
  
  // constructors
  public Month( int month, int year)
  {
    this.month = month;
    this.year  = year;

    temp  = new int[ 32 ] ;   
    valid = new boolean[ 32 ] ;  

    switch ( month )
    {
      case 1: case 3: case 5: case 7: case 8: case 10: case 12:
        daysInMonth = 31;
        break;
        
      case 4: case 6: case 9: case 11:
        daysInMonth = 30;
        break;
        
      case 2:
        if ( isLeapYear( year ) )
          daysInMonth = 29;
        else
          daysInMonth = 28;
        break;
          
      default :
        daysInMonth = 0;
    }    
  
  }
  
  public boolean isLeapYear( int year )
  {
    return ((year%4==0) && (year%100!=0)) || (year%400==0);
  }
  
  public String toString()
  {
    return month + "/" + year;
  }

}

Why 32???

Common Programming Trick: It is convenient to use array index 1 for day 1, array index 2 for day 2, and so on. So use length 32. Array cell zero is not used. You might think this is a waste, but it simplifies the programming, which is almost always a win. The programming logic needed to use indexes one less than the day number would require many more bytes than the four-byte unused cell.

So, why do all months use 32, even though some months have fewer than 31 days? For the same reason as above. Unused bytes at the end don't hurt.

The variable daysInMonth contains the number of days in a particular month. The constructor computes this based on the year and month supplied as parameters. The isLeapYear() method is used in this.


QUESTION 4:

Does this constructor do error checking?


go to previous page   go to home page   go to next page