2013-04-11 63 views
-1

這是一項家庭作業。Java時鐘報警

我想創建一個java 12小時鬧鐘。經過一週的不斷努力,我終於有了它,但是,當我設置鬧鐘時,它會在設定的時間前2-3分鐘關閉。另外,當我打盹時(應該打盹2分鐘),它立即熄滅。我總共有10個班級,但是我添加了相關的TimeTimeManager。我剛剛開始使用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(); 
    } 
} 
} 
+0

在'Time.addOneMinute'考慮增加'minute'您檢查後59。否則你會'58'滾到'0',而不是'59'。看起來像'時間'中的所有增量/ addOne方法的錯誤相同。 – Gus 2013-04-11 21:51:34

+0

非常感謝!我甚至沒有意識到這一點。在你和@jazzbassrob之間它是完美的工作! – 2013-04-11 21:59:43

回答

2

Amoungst其他的東西,你在Time.equals()方法相當顯著錯誤:

public boolean equals(Time time) { 

    if (hour == hour && minute == minute) {  
     return true; 
     } 
    else { 
     return false; 
     } 
    } 
} 

表達hour == hour是比較hour本身的實例變量,它將始終爲true。這顯然不是你想要什麼,而不是你希望它與給定time參數的hour現場比較,像這樣:

if (hour == time.getHour() && minute == time.getMinute()) {  
+0

非常感謝。教授給了我們上課,我們從那裏離開了解決方案。我知道這是錯誤的,但我不知道該如何解決它。這完全解決了我的問題,它現在完美。你們這裏真棒!我希望我能像你一樣熟練! – 2013-04-11 22:01:05