You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现判断导师已注册活动与指定活动是否重叠的校验方法?

问题排查与修复方案

你的代码目前存在两个核心问题,导致无法正确判断活动重叠:

1. 遍历范围错误

你当前的代码遍历了所有导师的活动列表,但需求是判断当前导师已注册的活动是否和新活动重叠。遍历所有导师完全不符合你的业务逻辑,应该只检查当前导师自己的活动。

2. 重叠判断逻辑不完整

你的判断条件只覆盖了「已有活动的开始/结束时间落在新活动区间内」这两种部分重叠的情况,漏掉了两种关键场景:

  • 新活动完全被已有活动包含(比如已有活动13:00-17:00,新活动14:00-16:00)
  • 已有活动完全被新活动包含(比如已有活动14:00-16:00,新活动13:00-17:00)

修复后的代码

假设这个方法是Tutor类的成员方法,修复后的代码如下:

public boolean overlap(Event event) {
    // 只遍历当前导师自己的活动
    for (Event e : this.getEvents()) {
        // 先确认两个活动在同一天
        if (e.getDate().equals(event.getDate())) {
            // 核心重叠判断逻辑:只要两个时间区间有交集就返回true
            // 逻辑:新活动开始时间早于已有活动结束时间,且新活动结束时间晚于已有活动开始时间
            boolean hasOverlap = event.getStartTime().isBefore(e.getEndTime()) 
                                && event.getEndTime().isAfter(e.getStartTime());
            if (hasOverlap) {
                return true; // 找到重叠直接返回,无需继续遍历
            }
        }
    }
    return false;
}

逻辑说明

这个判断条件可以覆盖所有重叠场景:

  • 部分重叠:比如已有14:00-16:30,新活动13:00-15:00 → 满足新start < 已有end且新end > 已有start
  • 完全包含(两种方向):不管是新活动被已有活动包含,还是反过来,都满足上述条件
  • 无重叠:比如已有14:00-16:00,新活动16:00-18:00 → 新start不小于已有end,条件不成立

边界时间的特殊处理

如果你的需求中,边界时间相等算重叠(比如已有活动16:30结束,新活动16:30开始),可以把判断条件改成:

boolean hasOverlap = event.getStartTime().isBeforeOrEqual(e.getEndTime()) 
                    && event.getEndTime().isAfterOrEqual(e.getStartTime());

内容的提问来源于stack exchange,提问作者user3740970

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:41:58