Java 如何在两个坐标之间填充二维布尔数组?

Java 如何在两个坐标之间填充二维布尔数组?,java,arrays,algorithm,Java,Arrays,Algorithm,我正在尝试为我的日历应用程序创建每日时间块。我有一个想法,创建一个代表一天中所有分钟的二维数组: 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

我正在尝试为我的日历应用程序创建每日时间块。我有一个想法,创建一个代表一天中所有分钟的二维数组:

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; 
    }
}
final int hour=24,min=60;
布尔dayBlock[][]=新布尔值[hour][min];
//初始化数组。真=可用,假=
忙碌的。
对于(int j=0;j<24;j++){
对于(int i=0;i<60;i++){
dayBlock[j][i]=真;
}
}
然而,我正在努力编写一个算法,以便精确地将事件从(startHour,startMin)填充到(endHour,endMin)

因为我是为多个事件做这件事的,所以我不能只看一遍然后回溯,因为它会弄乱上一个事件的时间块

//从用户处获取开始和结束时间以及开始和结束分钟数的输入,并验证边界值。
// 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. 
    }
}
int startHour、endHour、startMinute、endMinute; 用于(int j=开始时间;j结束分钟){ 打破 } dayBlock[j][i]=;//如果忙,则设置为false或true(如果可用)。 } }
//从用户处获取开始和结束时间以及开始和结束分钟数的输入,并验证边界值。
int startHour、endHour、startMinute、endMinute;
用于(int j=开始时间;j结束分钟){
打破
}
dayBlock[j][i]=;//如果忙,则设置为false或true(如果可用)。
}
}

标记从
(startHour,startMin)
(endHour,endMin)

//在第一个小时的剩余分钟内标记为false
对于(int i=startMin;i<60;i++){
dayBlock[startHour][i]=假;
}
//在第一个小时之后和最后一个小时之前,每分钟标记为false
对于(int j=startHour+1;j
标记从
(startHour,startMin)
(endHour,endMin)

//在第一个小时的剩余分钟内标记为false
对于(int i=startMin;i<60;i++){
dayBlock[startHour][i]=假;
}
//在第一个小时之后和最后一个小时之前,每分钟标记为false
对于(int j=startHour+1;j
我认为您可能应该重新考虑使用2D阵列的想法。 你试图表现时间,这自然不是二维的,而是一维的

为什么不使用简单的一维数组,而不是二维数组,如下所示:

boolean dayBlock[]=new boolean[hour*minute]

要计算给定时间在数组中的表示位置,只需使用:


int start=小时*60+分钟

我认为您可能应该重新考虑使用2D阵列的想法。 你试图表现时间,这自然不是二维的,而是一维的

为什么不使用简单的一维数组,而不是二维数组,如下所示:

boolean dayBlock[]=new boolean[hour*minute]

要计算给定时间在数组中的表示位置,只需使用:


int start=小时*60+分钟

另一个选项是为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;

对于(int i=strat;i另一个选项可以是为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;

对于(int i=strat;i这对startHour=6、startMin=0、endHour=8、endMin=0不起作用,因为内部循环永远不会执行,但对startHour=6、startMin=30、endHour=7、endMin=15仍然不起作用。它只标记6:30-7:00之间的时间,但7:00-7:15之间的时间保持不变。对于相同的参数值仍然不起作用s、 请在测试之前正确测试您的代码updating@Andreas为什么不为相同的参数工作?你能解释一下吗?我运行它,它只是从6:00-7:15开始标记,而不是从6:30-7:15开始标记,这对startHour=6、startMin=0、endHour=8、endMin=0不起作用,因为内部循环永远不会执行,但对startHour=6、startMi不起作用n=30,endHour=7,endMin=15。它只标记6:30-7:00之间的时间,但7:00-7:15之间的时间保持不变。对于相同的参数值仍然不起作用。请在测试之前正确测试代码updating@Andreas为什么不为相同的参数工作?你能解释一下吗?我运行它,它只是标记6:00-7:15,而不是6:30-7:15Y你是对的,我应该考虑一下。那会让一切变得更简单。谢谢!!我也不会这么说。时间根本没有尺度,为什么你要把日历的精确度限制在几分钟?那么跨越几天的事件呢?我只会列出一个事件列表,按开始时间排序。一个叫做“IntervalTree”的数据结构可能会有帮助。你是对的,我应该考虑一下。那样会更简单。谢谢!!我也不会同意。时间根本没有尺度,为什么你要将日历的精度限制在分钟?那么跨多天的事件呢?我只会列出一个事件列表,按开始时间排序。数据结构可以“IntervalTree”可能会有所帮助。
dail
// 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;
}
    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;
    }