我正在尝试为我的日历应用创建每日时间段。我有一个想法,创建一个代表一天中所有时间的2D数组:
final int hour = 24, min = 60;
boolean dayBlock[][] = new boolean [hour][min];
//Initialize the array. true = available, false =
busy.
for (int j = 0; j < 24; j++) {
for (int i = 0; i < 60; i++) {
dayBlock[j][i] = true;
}
}
但是,我正在努力编写一种算法,以精确地将事件从(startHour,startMin)填充到(endHour,endMin)。
由于我要针对多个事件进行此操作,因此我不能只是过去然后回溯,因为它会弄乱之前的事件时间范围。
答案 0 :(得分:2)
标记从(startHour, startMin)
到(endHour, endMin)
的范围
// mark false for the remaining minutes in first hour
for (int i = startMin; i < 60; i++) {
dayBlock[startHour][i] = false;
}
// mark false for every minute after first hour and before last hour
for (int j = startHour+1; j < endHour; j++) {
for (int i = 0; i < 60; i++) {
dayBlock[j][i] = false;
}
}
// mark false for the remaining minutes in last hour
for (int i = 0; i < endMin; i++) {
dayBlock[endHour][i] = false;
}
答案 1 :(得分:2)
我认为您可能应该重新考虑使用2D阵列的想法。 您正在尝试表示时间,它自然不是二维的,而是一维的。
为什么要使用简单的1D数组而不是2D数组?
boolean dayBlock[] = new boolean[hour * minute];
要计算给定时间在数组中的位置,只需使用:
int start = theHour * 60 + theMinute;
答案 2 :(得分:2)
另一种选择是为2d数组从0到1440(24 * 60)的虚构索引,这使您可以为参数let arr = ["John","Jerry","Ted"];
let str = "John Elton";
var match = arr.some(function (name) {
return str.indexOf(name) > -1;
});
console.log(match);
做类似下面的事情:
(startHour, startMin) (endHour, endMin)
答案 3 :(得分:-1)
// Take input from user for start and end hour and start and end minuted and validate the boundary values.
int startHour,endHour,startMinute,endMinute;
for (int j = startHour; j <= endHour; j++) {
int i = 0;
if(j==startHour){
i= startMinute;
}
for (; i < 60; i++) {
if(j==endHour && i> endMinute) {
break;
}
dayBlock[j][i] = ;// if busy set false or true if available.
}
}