-1

这是一个家庭作业。

我正在尝试创建一个带有闹钟的 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();
    }
}
}
4

1 回答 1

2

在其他事情中,您在该方法中有一个相当大的错误Time.equals()

public boolean equals(Time time) {

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

该表达式hour == hourhour实例变量与自身进行比较,它始终是true. 这显然不是您想要的,而是您想将其与hour给定time参数的字段进行比较,如下所示:

    if (hour == time.getHour() && minute == time.getMinute() ) {     
于 2013-04-11T21:40:14.500 回答