package j2.lesson05;
/**
* 課題1803 - 解答例.
* アラームつきの時計を表すクラス.
* @author arakawa
* @version $Id: AlarmClock18_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class AlarmClock18 extends Clock {
/** アラームが設定されているかどうか. */
private boolean alarm;
/** アラームを鳴らすまでの残り秒数. */
private int alarmRest;
/**
* 初期時刻を指定してインスタンスを生成する。
* この状態ではアラームは解除されている。
* @param hour 時
* @param minute 分
* @param second 秒
*/
public AlarmClock18(int hour, int minute, int second) {
super(hour, minute, second);
this.alarmRest = 0;
this.alarm = false;
}
/**
* アラームをセットする。
* すでにアラームがセットされていた場合、それは解除される。
* @param hour アラームを鳴らす時
* @param minute アラームを鳴らす分
* @param second アラームを鳴らす秒
*/
public void setAlarmFor(int hour, int minute, int second) {
int alarmTime = hour * 3600 + minute * 60 + second;
// 現在時刻よりも手前にあれば、明日に鳴らす
if (alarmTime < getTimeAsSec()) {
this.alarmRest = alarmTime - getTimeAsSec() + 86400;
}
else {
this.alarmRest = alarmTime - getTimeAsSec();
}
this.alarm = true;
// 必要ならばすぐにアラーム
alarm();
}
/**
* n 秒だけ進める。
* @param n 進める秒数
*/
public void tick(int n) {
// 親クラスの時計を進める
super.tick(n);
// アラームの処理
this.alarmRest -= n;
alarm();
}
/**
* 必要ならばアラームを鳴らす。
*/
private void alarm() {
if (this.alarm && this.alarmRest <= 0) {
System.out.println("アラーム");
this.alarm = false;
}
}
}
|