這是一項家庭作業。Java時鐘報警
我想創建一個java 12小時鬧鐘。經過一週的不斷努力,我終於有了它,但是,當我設置鬧鐘時,它會在設定的時間前2-3分鐘關閉。另外,當我打盹時(應該打盹2分鐘),它立即熄滅。我總共有10個班級,但是我添加了相關的Time
和TimeManager
。我剛剛開始使用Java,而且我很難用它,所以很抱歉如果這是一個愚蠢的問題。
Time
:
public class Time {
private int hour;
private int minute;
public Time(int initHour, int initMinute) {
if (1 <= hour && hour <= 12) {
hour = initHour;
}
else if (hour == 0) {
hour = 12;
}
if (0 <= minute && minute <= 59) {
minute = initMinute;
}
}
public void addOneMinute() {
minute++;
if (minute == 59) {
incrementHour();
minute = 0;
}
}
public void incrementHour() {
hour++;
if (hour > 12) {
hour = 1;
}
}
public void incrementMinute() {
minute++;
if (minute == 59) {
minute = 0;
}
}
public int getHour() {
if (hour >= 1 && hour <= 12) {
}
return hour;
}
public int getMinute() {
if (minute >=0 && minute <= 59) {
}
return minute;
}
public boolean equals(Time time) {
if (hour == hour && minute == minute) {
return true;
}
else {
return false;
}
}
}
TimeManager
:
public class TimeManager {
private static final int SNOOZE_DURATION_IN_MINUTES = 2;
private Time currentTime;
private Time alarmTime;
private Time snoozeTime;
private Display display;
private ModeManager modeMgr;
private Alarm alarm;
public TimeManager() {
currentTime = new Time(12,0);
alarmTime = new Time(12,0);
snoozeTime = new Time(12,0);
}
public void setDisplay(Display newDisplay) {
display = newDisplay;
showCurrentTime();
}
public void setModeManager(ModeManager newModeMgr) {
modeMgr = newModeMgr;
}
public void setAlarm(Alarm newAlarm) {
alarm = newAlarm;
}
public void incrementCurrentMinute() {
currentTime.addOneMinute();
Mode mode = modeMgr.getMode();
if (mode == mode.ALARM_ON || mode == mode.ALARM_OFF || mode == mode.SET_TIME) {
updateDisplay();
}
if (mode == mode.ALARM_ON) {
if (currentTime.equals(alarmTime) || currentTime.equals(snoozeTime)) {
soundAlarmIfNecessary();
}
}
}
public void incrementCurrentHour() {
currentTime.incrementHour();
Mode mode = modeMgr.getMode();
if (mode == mode.ALARM_ON || mode == mode.ALARM_OFF || mode == mode.SET_TIME) {
updateDisplay();
}
if (mode == mode.ALARM_ON) {
if (currentTime.equals(alarmTime) || currentTime.equals(snoozeTime)) {
soundAlarmIfNecessary();
}
}
}
public void incrementAlarmMinute() {
alarmTime.incrementMinute();
Mode mode = modeMgr.getMode();
if (mode == mode.SET_ALARM) {
updateDisplay();
}
if (mode == mode.ALARM_ON) {
if (currentTime.equals(alarmTime)) {
soundAlarmIfNecessary();
}
}
}
public void incrementAlarmHour() {
alarmTime.incrementHour();
Mode mode = modeMgr.getMode();
if (mode == mode.SET_ALARM) {
updateDisplay();
}
if (mode == mode.ALARM_ON) {
if (currentTime.equals(alarmTime)) {
soundAlarmIfNecessary();
}
}
}
public void snooze() {
while (alarm.isOn()) {
alarm.off();
int hour = currentTime.getHour();
int minute = currentTime.getMinute();
minute += SNOOZE_DURATION_IN_MINUTES;
if (minute > 59) {
minute -= 60;
++hour;
}
snoozeTime = new Time(hour, minute);
}
}
public void showCurrentTime() {
display.showHour(currentTime.getHour());
display.showMinute(currentTime.getMinute());
}
public void showAlarmTime() {
display.showHour(alarmTime.getHour());
display.showMinute(alarmTime.getMinute());
}
private void updateDisplay() {
Mode mode = modeMgr.getMode();
if (mode == mode.SET_TIME || mode == mode.ALARM_ON || mode == mode.ALARM_OFF) {
showCurrentTime();
}
else {
showAlarmTime();
}
}
private void soundAlarmIfNecessary() {
Mode mode = modeMgr.getMode();
if (mode == mode.ALARM_ON && currentTime.equals(alarmTime) || currentTime.equals(snoozeTime)) {
alarm.on();
}
}
}
在'Time.addOneMinute'考慮增加'minute'您檢查後59。否則你會'58'滾到'0',而不是'59'。看起來像'時間'中的所有增量/ addOne方法的錯誤相同。 – Gus 2013-04-11 21:51:34
非常感謝!我甚至沒有意識到這一點。在你和@jazzbassrob之間它是完美的工作! – 2013-04-11 21:59:43