Skip to content

Latest commit

 

History

History
111 lines (96 loc) · 5.31 KB

dd4c.md

File metadata and controls

111 lines (96 loc) · 5.31 KB

Back to questions

dd4c: Clocks

Write a class, Clock, that records a moment in time during a day, in the granularity of seconds, together with a mode in which the time should be shown. The mode should be one of:

  • 24-hour format, i.e., hh:mm:ss
  • number of seconds since midnight, e.g., 03:24:52 is 12292 seconds since midnight

Your class should allow a clock to be constructed either by specifying a single integer, the number of seconds since midnight (in which case this is the display mode to be used), or three integers, representing the current hour, minute and seconds (in which case 24-hour format should be used as the display mode).

Your class should provide a method, tick(), that advances the time stored by a Clock object by one second. In addition, you should override toString() so that a Clock is represented as a string according to the appropriate display mode.

Write a Java program, say in ClockDemo.java, to demo your Clock class by creating a few clocks, then updating their time once per second. You can do this by using Java's Thread.sleep(x) method, which causes execution to pause for x milliseconds. This method of timing is not precise, but suffices for this exercise. Because Thread.sleep(x) can throw an InterruptedException, you will need to specify that your main method throws this exception. The output of your program should look something like this:

Clock 1 shows: 0 seconds since midnight.  Clock 2 shows: 23:59:53
Clock 1 shows: 1 seconds since midnight.  Clock 2 shows: 23:59:54
Clock 1 shows: 2 seconds since midnight.  Clock 2 shows: 23:59:55
Clock 1 shows: 3 seconds since midnight.  Clock 2 shows: 23:59:56
Clock 1 shows: 4 seconds since midnight.  Clock 2 shows: 23:59:57
Clock 1 shows: 5 seconds since midnight.  Clock 2 shows: 23:59:58
Clock 1 shows: 6 seconds since midnight.  Clock 2 shows: 23:59:59
Clock 1 shows: 7 seconds since midnight.  Clock 2 shows: 00:00:00
Clock 1 shows: 8 seconds since midnight.  Clock 2 shows: 00:00:01
Clock 1 shows: 9 seconds since midnight.  Clock 2 shows: 00:00:02
...

Now design a class, AlarmClock, which extends Clock by storing a specific time at which an alarm should sound. An AlarmClock should also include a boolean field determining whether the alarm is currently sounding; this should initially be false. AlarmClock should provide appropriate constructors so that one can create an AlarmClock with a specified 24-hour time and alarm, or a "seconds since midnight" time and alarm.

Override the tick() method to behave as for Clock, but to additionally control the alarm. If the alarm time is reached, the alarm should be turned on, and should remain on for 60 seconds.

Also override the toString() method to indicate whether the alarm is currently sounding.

Write a program, AlarmClockDemo.java to demo your AlarmClock class, similarly to Clock.java above. For a single clock, initialised to 23:59:50 with the alarm set to go off at 23:59:58, the output of your program should be something like:

Clock says: 23:59:50
Clock says: 23:59:51
Clock says: 23:59:52
Clock says: 23:59:53
Clock says: 23:59:54
Clock says: 23:59:55
Clock says: 23:59:56
Clock says: 23:59:57
Clock says: 23:59:58 BEEP!
Clock says: 23:59:59 BEEP!
Clock says: 00:00:00 BEEP!
...
Clock says: 00:00:55 BEEP!
Clock says: 00:00:56 BEEP!
Clock says: 00:00:57 BEEP!
Clock says: 00:00:58
Clock says: 00:00:59
Clock says: 00:01:00
Clock says: 00:01:01
Clock says: 00:01:02

Finally, write a class called RadioAlarmClock which extends AlarmClock. A RadioAlarmClock should have a station field, which either has a special value None, or the value of a radio station. You should choose, or make up, a number of suitable radio stations. If the station field is None, a RadioAlarmClock should behave exactly as an AlarmClock. Otherwise, instead of displaying BEEP! when the alarm is sounding, an appropriate message representative of the given radio station should be shown.

Write an RadioAlarmClockDemo.java program to demonstrate this. For example, given three radio alarm clocks, each initialised to 23:59:50 with the alarm set to go off at 23:59:58, and tuned to no station, Radio 4 and Five Live, respectively, your program should display something like:

Clocks say: 23:59:50 - 23:59:50 - 23:59:50
Clocks say: 23:59:51 - 23:59:51 - 23:59:51
Clocks say: 23:59:52 - 23:59:52 - 23:59:52
Clocks say: 23:59:53 - 23:59:53 - 23:59:53
Clocks say: 23:59:54 - 23:59:54 - 23:59:54
Clocks say: 23:59:55 - 23:59:55 - 23:59:55
Clocks say: 23:59:56 - 23:59:56 - 23:59:56
Clocks say: 23:59:57 - 23:59:57 - 23:59:57
Clocks say: 23:59:58 BEEP! - 23:59:58 Blah, blah, blah - 23:59:58 ...and it's a GOAL!!
Clocks say: 23:59:59 BEEP! - 23:59:59 Blah, blah, blah - 23:59:59 ...and it's a GOAL!!
Clocks say: 00:00:00 BEEP! - 00:00:00 Blah, blah, blah - 00:00:00 ...and it's a GOAL!!
...
Clocks say: 00:00:01 BEEP! - 00:00:01 Blah, blah, blah - 00:00:01 ...and it's a GOAL!!
Clocks say: 00:00:56 BEEP! - 00:00:56 Blah, blah, blah - 00:00:56 ...and it's a GOAL!!
Clocks say: 00:00:57 BEEP! - 00:00:57 Blah, blah, blah - 00:00:57 ...and it's a GOAL!!
Clocks say: 00:00:58 - 00:00:58 - 00:00:58
Clocks say: 00:00:59 - 00:00:59 - 00:00:59
Clocks say: 00:01:00 - 00:01:00 - 00:01:00
Clocks say: 00:01:01 - 00:01:01 - 00:01:01
Clocks say: 00:01:02 - 00:01:02 - 00:01:02