我正试图为我的日历应用程序创建一个每日时间块。我有一个想法,创建一个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(。
由于我是为多个事件做这件事的,所以我不能只是过去然后回溯,因为这会打乱上一个事件时间块。
标记从(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;
}
我认为您可能应该重新思考使用2D数组的想法。你试图表现时间,它自然不是二维的,而是一维的。
代替2D阵列,为什么不使用像这样的简单1D阵列:
boolean dayBlock[] = new boolean[hour * minute];
要计算给定时间在数组中的表示位置,只需使用:
int start = theHour * 60 + theMinute;
另一种选择是为您的2d数组考虑一个从0到1440(24*60(的虚索引,这使您能够为参数(startHour, startMin) (endHour, endMin)
:创建如下内容
int startHour = 6;
int startMin = 15;
int endHour = 8;
int endMin = 0;
int strat = startHour * 60 + startMin;
int end = endHour * 60 + endMin;
for(int i = strat; i <= end; i++){
dayBlock[i/60][i%60] = false;
}
// 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.
}
}