2013-04-11 2 views
-1

이것은 과제물입니다.Java 시계 알람 켜짐

알람이있는 Java 12 시간 시계를 만들려고합니다. 일정한 일을 한 후에 나는 마침내 달리고있다. 그러나 내가 알람을 울리면 설정된 시간보다 2-3 분 전에 꺼진다. 또한, 내가 잠을 잤을 때 (그것은 2 분 동안 잠잠해질 예정 임) 즉시 다음 순간부터 사라집니다. 나는 총 10 개의 수업을 가지고 있지만, 관련되어야하는 학생들을 추가하려고합니다. TimeTimeManager. 나는 자바를 막 시작했으며, 힘든 시간을 보냈습니다. 이것이 바보 같은 질문이라면 미안합니다.

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 boolean equals(Time time) { 

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

표현 hour == hour는 비교입니다 : 다른 것들 amoungst에

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

당신이 59를 확인 후 minute''증가 고려 Time.addOneMinute'이 대신 당신은 다음과 같이 주어진 time 인수의 hour 필드와 비교하려면, 당신이 원하는 것을 명확하지 않다. 그렇지 않으면 59 대신에 58에서 0으로 롤오버됩니다. 'Time'의 모든 increment/addOne 메소드에 대해 동일한 오류가 발생합니다. – Gus

+0

정말 고마워요 !! 나는 그것을 깨닫지도 못했다. 너와 @ jazzbassrob 사이에 완벽하게 작동하고있다! –

답변

2

, 당신은 Time.equals() 방법에서 매우 중요한 버그가 hour 인스턴스 변수 자체는 항상 true입니다. `에서

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

정말 고마워요. 교수님은 우리에게 수업을 주셨고 그곳에서 우리는 그것을 알아 내기 위해 떠났습니다. 나는 그것이 잘못되었다는 것을 알고 있었지만 그것을 고치기 위해 무엇을해야할지 확신하지 못했습니다. 이것은 완전히 내 문제를 해결하고 완벽하게 작동합니다. 여기 너희들은 끝내 주네! 나는 당신이 하루 종일만큼 정통 할 수 있기를 바랍니다! –