Пару недель нового в кодировании! Мне было поручено создать метод, при котором пользователь сможет записаться на «встречу» с 9:00 до 17:00. Я создал логический массив размером 8 с именем «Доступность» (0 = 9:00, 1 = 10:00, 2 = 11:00, 3 = 12:00 ... 8 = 17:00.) True означает, что время доступно, false означает, что время недоступно.
Метод имеет параметры описания, час и продолжительность. Мой метод способен записаться на прием в выбранное время.
Однако, допустим, я забронировал встречу в 9 утра с продолжительностью 1. -> 0 теперь ложно. Затем, я забронировал встречу в 11 утра с продолжительностью 1. -> 2 теперь ложно. Затем я записываюсь на встречу в 10:00 с продолжительностью 2. -> 1 (10:00) должен оставаться верным, поскольку пользователь не должен иметь возможность записываться на 2 часа, если следующий час (11:00) уже забронирован, верно?
Я пытался заставить это произойти в моем коде, но безрезультатно. Мой код все еще записывает 10 утра и устанавливает слот в ложь! Из того, что я понял, я считаю, что проблема в строке 96, оператор , если , проверяющий, является ли какой-либо из слотов в течение продолжительности ложным.
Я пытался установить булеву переменную равной true в начале кода, а если оператор if обнаружил ложную доступность, установите переменную check как false. Это останавливает следующий блок кода, где оператор IF проверяет, является ли 'check' истинным (если все слоты в течение продолжительности являются истинными, поскольку он не был установлен в ложное значение).
public boolean makeAppointment(String desc, int duration, int hour) {
boolean check = true;
if (!((hour + (duration - 1) > 17))) { // it'll be 10
int booleanHour = hour - 9; // it'll be 1
if (booleanHour <= availability.length && booleanHour >= 0 && duration > 0 && duration <= 4) { // This 4 is a placeholder, subject to change.
for (int i = booleanHour; i < booleanHour + duration; i++) {
if (availability[i] == false) { // This isn't working? Confusion.
System.out.println( // response to if false
"This has hour been booked, please choose another time. We open at 9am, and close at 5pm.");
System.out.println(check);
check = false;
return false;
}
if (check) {
for (int b = booleanHour; b < booleanHour + duration; b++) {
availability[b] = false;
Appointment appoint = new Appointment(desc, duration, b + 9);
schedule.put(b + 9, appoint);
}
return true;
}
}
} else {
System.out.println("The max duration of a meeting is 4 hours.");
}
}
return false;
}
Этои мой тестовый код.
Day day5 = new Day();
day5.makeAppointment("hello", 1, 9);
assertEquals(day5.getAvailability(0), false);
day5.makeAppointment("hello", 1, 11);
assertEquals(day5.getAvailability(2), false);
day5.makeAppointment("hello", 2, 10);
assertEquals(day5.getAvailability(1), true);
Я пытался найти проблему и исправить ее, не обращаясь за помощью к сторонним разработчикам, но дошло до того, что смотреть на экран компьютера не очень хороший способучиться и иметь кого-то, кто может указать на проблему, из которой я могу учиться, является лучшим вариантом!
Если я получу ответ, спасибо! :) Если что-то в этом посте не разрешено, извините, в первый раз!