Добавление кода в существующий метод - PullRequest
0 голосов
/ 30 января 2012

Просто трудно добавить определенный бит данного кода, чтобы добавить дополнительную проверку к существующему методу.

public boolean makeAppointment(int time,
                               Appointment appointment)
{
    if(validTime(time)) {
        int startTime = time - START_OF_DAY;
        if(appointments[startTime] == null) {
            int duration = appointment.getDuration();
            // Fill in all the slots for the full duration
            // of the appointment.
            for(int i = 0; i < duration; i++) {
                appointments[startTime + i] = appointment;
            }
            return true;
        }
        else {

            return false;
        }
    }
    else {
        return false;
    }
}

Является основным методом makeAppointment. Мне нужно добавить метод, который проверяет, перекрывает ли одно назначение продолжительность другого. Если у меня два приема: одно в 17:00 и длится 2 часа, другое в 18:00 и длится только один час. Мне нужно добавить следующий метод в этот существующий код, чтобы этого не происходило.

private boolean checkMultihourAppointment(int startTime, int duration){

Вот заголовок для него. Я попытался реализовать его, но в итоге он не проходит каждый тест Junit.

Нужна дополнительная информация, пожалуйста, спросите:)

Ответы [ 4 ]

0 голосов
/ 30 января 2012

Сделайте это правильно ...

Шаг 1

Используйте хороший объектно-ориентированный дизайн и добавьте метод к Appointment, который проверяет наложение с другим Appointment, поэтому реализация внутри класса Appointment, которому он принадлежит

public class Appointment {
    Date start;
    int minutesDuration; // recommend change this to a Date

    public boolean overlaps(Appointment other) {
        // Check for any overlap by comparing opposite ends of each other
        return start.before(other.getEnd()) && getEnd().after(other.start);
    }

    private Date getEnd() {
        return new Date(start + minutesDuration * 60 * 1000);
    }
}

Шаг 2

Используйте этот метод в своем коде:

if (appointment.overlaps(other)) {
    // do something
}
0 голосов
/ 30 января 2012

Это то, что вы хотите?Перепишите существующий код, чтобы добавить метод проверки.

public boolean makeAppointment(int time,
                               Appointment appointment)
{
    if(validTime(time)) {
        int startTime = time - START_OF_DAY;
        int duration = appointment.getDuration();
        if(checkMultihourAppointment(startTime, duration)) {
            // Fill in all the slots for the full duration
            // of the appointment.
            for(int i = 0; i < duration; i++) {
                appointments[startTime + i] = appointment;
            }
            return true;
        }
        else {

            return false;
        }
    }
    else {
        return false;
    }
}

private boolean checkMultihourAppointment(int startTime, int duration){
    for(int i = 0; i < duration; i++) {
          if(appointments[startTime + i] != null) return false;
    }
    return true;
}
0 голосов
/ 30 января 2012
private boolean checkMultihourAppointment(int startTime, int duration){

    for (int i = startTime; i <= startTime + duration; i++){

        if (appointments[i] != null)
            return false;

    }

    return true;

}
0 голосов
/ 30 января 2012

С упрощенным кодом проще работать: код, перевернутый на бок, не является графиком того, насколько он хорош.

public boolean makeAppointment(int time, Appointment appointment) {
    if (!validTime(time)) {
        return false;
    }

    int startTime = time - START_OF_DAY;
    if (appointments[startTime] != null) {
        return false;
    }

    int duration = appointment.getDuration();

    // Here's where the new code goes
    if (appointmentOverlaps(time, duration)) {
        return false;
    }

    for (int i = 0; i < duration; i++) {
        appointments[startTime + i] = appointment;
    }

    return true;
}

appointmentOverlaps проверит следующие duration слоты встреч для null (пусто):

// Pseudo-code
public boolean appointmentOverlaps(int time, int duration) {
    while (appointment still going) {
        if (next slot filled) return true;
    }

    return false;
}

Подумайте о возврате какого-либо статуса, чтобы вызывающий абонент знал , почему встреча была отклонена.

appointmentOverlaps также должен обрабатывать существующиепроверка кода startTime, дальнейшее упрощение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...