如何在两个坐标之间填充2D布尔数组



我正试图为我的日历应用程序创建一个每日时间块。我有一个想法,创建一个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. 
}
}

最新更新