我設法使這項工作符合日界限要求。這很醜陋,但它似乎涵蓋了所有的情況。
雖然可以編寫一個存儲過程來做到這一點,它更容易在Java中表達,所以:
public void checkEvents (int[][] events, int startHour, int endHour)
final int START = 0;
final int END = 1;
final int HOURS_PER_DAY = 24;
for (int[] event : events) {
int start = startHour;
int end = (endHour < startHour) ? endHour + HOURS_PER_DAY : endHour;
int eventStart = event[START];
int eventEnd = (event[END] < event[START]) ? event[END] + HOURS_PER_DAY : event[END];
if (checkOverlap(result, event, start, end, eventStart, eventEnd))
|| (checkOverlap(result, event, start, end, eventStart + HOURS_PER_DAY, eventEnd + HOURS_PER_DAY))
|| (checkOverlap(result, event, start + HOURS_PER_DAY, end + HOURS_PER_DAY, eventStart, eventEnd))
|| (!checkOverlap(result, event, start + HOURS_PER_DAY, end + HOURS_PER_DAY, eventStart + HOURS_PER_DAY, eventEnd + HOURS_PER_DAY);
System.out.println("overlapped!");
}
}
private boolean checkOverlap(ArrayList<int[]> result, int[] event, int start, int end, int eventStart, int eventEnd) {
if ((eventStart >= start && eventStart < end) || (eventStart < start && eventEnd > start)) {
return true;
}
return false;
}
我不明白:你說之前_where事件的8期間讓他們的某些部分-10pm小時範圍_然後你說_a範圍就像23-2(晚上11點 - 凌晨2點)也應該工作_...所以,什麼是正確的? – Marco
我需要支持任意小時範圍。所以1-6,3-10,23-2,10-4,無論如何。 –