See below
Here is a runnable version of Month along with a testing class.
Copy and paste the code to MonthTester.java to compile and run it.
Play with it a while before moving on.
import java.util.*;
class Month
{
// constants
final int ERRORFLAG = 999;
// 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
private int[] temp;
private boolean[] valid; // true, if corresponding day holds data
// 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);
}
// Getters and Setters
public int getTemp( int dayNumber )
{
if ( dayNumber > 0 && dayNumber <= daysInMonth && valid[dayNumber] )
return temp[ dayNumber ];
else
return ERRORFLAG;
}
public boolean setTemp( int dayNumber, int tmp )
{
if ( dayNumber > 0 && dayNumber <= daysInMonth )
{
temp[dayNumber] = tmp;
valid[dayNumber] = true;
return true;
}
else
return false;
}
public String toString()
{
String str = month + "/" + year + "\n";
for ( int day = 1; day<=daysInMonth; day++ )
{
str += day + ": ";
if ( valid[day] )
str += temp[day] ;
else
str += "no data ";
str += "\n";
}
return str;
}
}
public class MonthTester
{
public static void main( String[] args)
{
Scanner scan = new Scanner( System.in );
Month jan = new Month( 1, 2017 ) ;
String line = "Y";
// Fill Month with temperatures
while ( line.toUpperCase().charAt(0) == 'Y' )
{
System.out.print("day? ");
int day = scan.nextInt();
System.out.print("temp ? ");
int temp = scan.nextInt();
if ( !jan.setTemp(day, temp ) )
System.out.println(" error in input ");
System.out.print("Continue (Y/N)? ");
line = scan.next();
}
System.out.println( jan );
}
}
The getter methods are not tested in the above. It would be nice to add tests in main() for them.
In computing the average temperature for a month, what values should be summed?