JAVA 需求如下: 1.有设备的日常工作时间段(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 2.有这个设备工作时间段内还未工作的空闲时间段如(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 3.传入某工序需要的工作时间(分) 3.判断这个设备这天的剩余连续工作时段是否满足工序的工作时间需要 返回true或false 注意 连续工作时段包含非工作时间段 比如设备工作时间段是09:00-10:00;13:00-14:00 某工序需要5分钟 此设备这天空闲时间是09:58-10:00 13:00-13:03 则此设备算做满足需要
时间: 2023-08-02 18:11:31 浏览: 188
好的,根据您的要求,以下是一个更新后的 Java 方法来检查设备是否有足够的工作时间来完成工序:
```java
public boolean checkWorkTime(ArrayList<String> workTimeSlots, ArrayList<String> freeTimeSlots, int processTime) {
// 首先,将所有时间段合并为一个列表
ArrayList<String> allTimeSlots = new ArrayList<String>();
allTimeSlots.addAll(workTimeSlots);
allTimeSlots.addAll(freeTimeSlots);
// 然后,对时间段按照开始时间排序
Collections.sort(allTimeSlots, new Comparator<String>() {
public int compare(String slot1, String slot2) {
String[] parts1 = slot1.split("-");
String[] parts2 = slot2.split("-");
return parts1[0].compareTo(parts2[0]);
}
});
// 接下来,遍历时间段,找到可用的工作时间段
int totalWorkTime = 0;
int lastEnd = -1;
for (int i = 0; i < allTimeSlots.size(); i++) {
String[] currentParts = allTimeSlots.get(i).split("-");
int currentStart = timeStringToMinutes(currentParts[0]);
int currentEnd = timeStringToMinutes(currentParts[1]);
if (lastEnd >= 0 && currentStart - lastEnd > 0) {
// 如果两个时间段之间有空闲时间,则将空闲时间加入总工作时间
int freeTime = currentStart - lastEnd;
totalWorkTime += freeTime;
}
// 如果当前时间段是工作时间段,则将工作时间加入总工作时间
if (workTimeSlots.contains(allTimeSlots.get(i))) {
int workTime = currentEnd - currentStart;
totalWorkTime += workTime;
}
lastEnd = currentEnd;
// 如果总工作时间已经足够完成工序,则返回 true
if (totalWorkTime >= processTime) {
return true;
}
}
return false;
}
```
与之前的方法相比,这个方法增加了一个 lastEnd 变量来记录上一个时间段的结束时间。在遍历时间段时,如果两个时间段之间存在空闲时间,则将空闲时间加入总工作时间。如果当前时间段是工作时间段,则将工作时间加入总工作时间。如果总工作时间已经足够完成工序,则返回 true。
在您的示例中,如果设备工作时间段是 09:00-10:00;13:00-14:00,某工序需要 5 分钟,此设备这天空闲时间是 09:58-10:00 13:00-13:03,则此设备算做满足需要。
希望这个方法能够满足您的需求!
阅读全文