Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算时间表中的“漏洞”_Java - Fatal编程技术网

Java 如何计算时间表中的“漏洞”

Java 如何计算时间表中的“漏洞”,java,Java,我有一个这样的二维数组,它代表一个时间表: 橙色的牢房是讲座,白色的是空闲时间。我如何计算同一天两堂课之间的空闲时间?列为天,行为小时 例如,在本表中,结果应为: 第一列为2 第二列为0 ->函数返回2,因为2+0=2我不熟悉java 就说这个概念, 1. Merge the two array as provide the result as a single. 2. Count the array values. 我不熟悉java 就说这个概念, 1. Merge the two arra

我有一个这样的二维数组,它代表一个时间表:

橙色的牢房是讲座,白色的是空闲时间。我如何计算同一天两堂课之间的空闲时间?列为天,行为小时

例如,在本表中,结果应为: 第一列为2 第二列为0
->函数返回2,因为2+0=2

我不熟悉java

就说这个概念,

1. Merge the two array as provide the result as a single.
2. Count the array values.

我不熟悉java

就说这个概念,

1. Merge the two array as provide the result as a single.
2. Count the array values.
像这样的

public int countHoles(boolean[][] timetable){
     int count=0;
     for (int days=0;days<timetable.length;days++){
          for (int i =1;i<timetable[days].length-1;i++){
              if (!timetable[days][i]){
                   int j=i-1; boolean before=false;
                   while(j>=0 || before) {if (timetable[days][j]) before=true; j--;}
                   j=i+1; boolean after=false;
                   while(j<timetables[days].length || after) {if (timetable[days][j]) after=true; j++;}
                   if (before && after) count++;
          }
     }

}
不知道第一个是否有效。。但这是你做这件事的愚蠢方式。

类似这样的事情

public int countHoles(boolean[][] timetable){
     int count=0;
     for (int days=0;days<timetable.length;days++){
          for (int i =1;i<timetable[days].length-1;i++){
              if (!timetable[days][i]){
                   int j=i-1; boolean before=false;
                   while(j>=0 || before) {if (timetable[days][j]) before=true; j--;}
                   j=i+1; boolean after=false;
                   while(j<timetables[days].length || after) {if (timetable[days][j]) after=true; j++;}
                   if (before && after) count++;
          }
     }

}
不知道第一个是否有效。。但这是你做这件事的愚蠢方式

如果有讲座,则使用二维布尔数组true,如果没有讲座,则使用false。。或者类似的 遍历数组 如果有空闲元素,请检查当前If available值上方和下方的元素是否为true。如果是,则增加一个计数器 遍历之后,计数器将给出结果。 尝试自己实施,如果您面临任何问题,请告知我们

schedule = ['11010100','01100000'] #original schedule
freehours = [day.strip('0').count('0') for day in schedule]
如果有讲座,则使用二维布尔数组true,如果没有讲座,则使用false。。或者类似的 遍历数组 如果有空闲元素,请检查当前If available值上方和下方的元素是否为true。如果是,则增加一个计数器 遍历之后,计数器将给出结果。 尝试自己实施,如果您面临任何问题,请告知我们

schedule = ['11010100','01100000'] #original schedule
freehours = [day.strip('0').count('0') for day in schedule]
算法:转换为类似“11010100”的字符串,从“110101”的开头和结尾去掉0个字符,并计算剩余的0个字符2。说明性地说,第一个和最后一个填充期间之间未填充的所有期间都是您的空闲期间

超级极客: 更有效地,如果在C++中使用一个布尔值数组:为数组获取一个迭代器,在开始时通过0个VAL运行它。声明另一个,并从末尾向后迭代任何0个VAL。然后向前迭代开始迭代器,计算所有零,直到到达结束迭代器

但是,如果您有一个很长的列表,则只向前迭代可能更有效,存储最后一个1的位置,并在遇到下一个1时将每个空格的大小添加到计数器中。通过这种方式,可以在连续块中读取内存,并且可以在流式输入上执行求和,甚至可以将运行总计写入套接字

算法:转换为类似“11010100”的字符串,从“110101”的开头和结尾去掉0个字符,并计算剩余的0个字符2。说明性地说,第一个和最后一个填充期间之间未填充的所有期间都是您的空闲期间

超级极客: 更有效地,如果在C++中使用一个布尔值数组:为数组获取一个迭代器,在开始时通过0个VAL运行它。声明另一个,并从末尾向后迭代任何0个VAL。然后向前迭代开始迭代器,计算所有零,直到到达结束迭代器


但是,如果您有一个很长的列表,则只向前迭代可能更有效,存储最后一个1的位置,并在遇到下一个1时将每个空格的大小添加到计数器中。通过这种方式,可以在连续块中读取内存,并且可以在流式输入上执行求和,甚至可以将运行的总计写入套接字。

如果两次讲座之间有两个小时的间隔,则内部if语句将失败。我认为它不起作用,因为数组的第一维中有几个小时,因此,timeline.length返回小时数,nut number of days。如果两堂课之间有两个小时的间隔,内部if语句将失败。我认为它不起作用,因为数组的第一维中有小时,因此timeline.length返回小时数,nut number of days。根据Fabio最初的尝试,如果按照法比奥最初的尝试,两次授课之间的间隔超过一小时,则第3点失败;如果两次授课之间的间隔超过一小时,则第3点失败。我不理解你的想法。你能再解释一下吗?我不明白你的意思。你能再解释一下吗?