You need to enable JavaScript to run this app. factory_clashes函数if条件为假仍执行、冲突计数不符预期问题
优惠活动
大模型
产品
解决方案
定价
更多

factory_clashes函数if条件为假仍执行、冲突计数不符预期问题

工厂任务排程冲突检测函数异常排查

异常原因定位

  • 冲突对重复计数:原代码的双重循环遍历所有有序索引对,同一组冲突(如task[0]与task[7])会被判定两次:一次是j=0、i=7时命中,另一次是j=7、i=0时也命中,直接导致计数翻倍
  • 计数变量残留:如果count是全局变量,多次调用函数时会保留上一次运行的累加值,不会自动清零,进一步导致计数偏移
  • 所谓“条件为假仍执行逻辑”属于误判:上述两个问题的叠加效果,会让输出结果看起来不符合预期,并非if判断逻辑失效
  • 返回值缺失:函数声明为int返回类型,但没有对应的返回语句,属于未定义行为

修复后的代码实现

int factory_clashes()
{
    // 计数变量改为函数内局部变量,每次调用自动初始化为0,避免全局残留问题
    int count = 0;
    //find out how many tasks are assigned to same factory at same time and same date
    cout<<count<<endl;
    for(int j=0; j<8; j++)
    {
        // 调整i的起始值为j+1,仅比较j之后的任务,避免重复判定同一对冲突
        for(int i=j+1; i<8; i++)
        {
            // 嵌套if合并为逻辑与判断,逻辑和原实现完全一致,更清晰
            if(Task[j].WorkshopID==Task[i].WorkshopID
                && Task[j].MachineID==Task[i].MachineID
                && Task[j].StartDate.Day==Task[i].StartDate.Day
                && Task[j].StartTime.Hours==Task[i].StartTime.Hours)
            {
                cout<<j<<" th value  "<<i<<" th iteration  "<<count<<endl;
                count++;
                cout<<count<<endl;
            }
        }
    }
    cout<<"CLASHES"<<endl<<count<<endl;
    // 补充返回值,匹配函数声明的int返回类型
    return count;
}

修复后效果

按照调整后的逻辑,仅task[0]与task[7]的冲突会被判定1次,最终计数和输出完全符合硬编码测试数据的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 05:06:10