final is used for named constants.
In the slightly improved code,
ERRORFLAG
is used as a return value to flag an error.
The caller is expected to check the return value before using it.
In a large project,
the same value could be used throughout the code.
This improves readability and consistency.
If the value needs to change (global warming?) the change can be made in just one place.
public 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
// temperature data
private int[] temp; // day 1 in temp[1]
private boolean[] valid;
...
// 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++ )
{
str += day + ": ";
if ( )
str += temp[day] ;
else
str += "no data";
str += "\n";
}
return str;
}
}
Amusing story: as the year 2000 was approaching, many programs needed to be fixed because they used two digits for the year. "65" was used for "1965" and so on. Uninitialized years were set to "99" which, when the programs were written, was far into the future. But in "1999" this value did not work. Many VHR recorders stopped working in 1999.
Of course, we need a toString() method. Please complete it.