The Way to Programming
The Way to Programming
I have this code taken from. Java Fundamentals I and II and yet I can’t solve this:
public class Time2 { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second=0; // 0 - 59 // Time2 no-argument constructor: initializes each instance variable // to zero; ensures that Time2 objects start in a consistent state public Time2() { this( 0, 0, 0 ); // invoke Time2 constructor with three arguments } // end Time2 no-argument constructor // Time2 constructor: hour supplied, minute and second defaulted to 0 public Time2( int h ) { this( h, 0, 0 ); // invoke Time2 constructor with three arguments } // end Time2 one-argument constructor // Time2 constructor: hour and minute supplied, second defaulted to 0 public Time2( int h, int m ) { this( h, m, 0 ); // invoke Time2 constructor with three arguments } // end Time2 two-argument constructor // Time2 constructor: hour, minute and second supplied public Time2( int h, int m, int s ) { setTime( h, m, s ); // invoke setTime to validate time } // end Time2 three-argument constructor // Time2 constructor: another Time2 object supplied public Time2( Time2 time ) { // invoke Time2 three-argument constructor this( time.getHour(), time.getMinute(), time.getSecond() ); } // end Time2 constructor with a Time2 object argument // Set Methods // set a new time value using universal time; ensure that // the data remains consistent by setting invalid values to zero public void setTime( int h, int m, int s ) { setHour( h ); // set the hour setMinute( m ); // set the minute setSecond( s ); // set the second } // end method setTime // validate and set hour public void setHour( int h ) { hour= ((h>=0 && h<24) ? h:0; } // end method setHour // validate and set minute public void setMinute( int m ) { minute= ((m>=0 && m<60) ? m:0; } // end method setMinute // validate and set second public void setSecond( int s ) { second= ((s>=0 && s<60) ? s:0; } // end method setSecond // Get Methods // get hour value public int getHour() { return hour; } // end method getHour // get minute value public int getMinute() { return minute; } // end method getMinute // get second value public int getSecond() { return second; } // end method getSecond // convert to String in universal-time format (HH:MM:SS) public String toUniversalString() { return String.format( "%02d:%02d:%02d", getHour(), getMinute(), getSecond() ); } // end method toUniversalString // convert to String in standard-time format (H:MM:SS AM or PM) public String toString() { return String.format( "%d:%02d:%02d %s", ( (getHour() == 0 || getHour() == 12) ? 12 : getHour() % 12 ), getMinute(), getSecond(), ( getHour() < 12 ? "AM" : "PM" ) ); } // end method toString } // end class Time2
What I need to do is reduce properties in the clas to only one and display everything in seconds. I am not allowed to modify anything except getters and setters...So, can anybody help?
Given a single property representing the number of seconds, you should be able to break it down into a number of whole hours, whole minutes and remaining seconds.
Suppose you have 5000 seconds, this is the same as 1 hour, 23 minutes, 20 seconds.
So store the data in a total_seconds property. Rewrite the getters to use the the right math: getHour() { return total_seconds % 3600;} and so forth. Then the setters do the opposite:
setHour( int h ) { int hr = (h >= 0 && h <= 23) ? h : 0; total_seconds = 3600 * hr + 60 * getMinute() + getSecond(); }
Sign in to your account