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

时间:2018-11-27 09:26:11

标签: java arrays algorithm

我正在尝试为我的日历应用创建每日时间段。我有一个想法,创建一个代表一天中所有时间的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)。

由于我要针对多个事件进行此操作,因此我不能只是过去然后回溯,因为它会弄乱之前的事件时间范围。

4 个答案:

答案 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. 
    }
}