if (agvs[i].getBattery() < safe_battery_level) { bool has_charge_task = false; for (int k = 0; k < tasks.size(); k++) { if (tasks[k].a_id == agvs[i].id_ && tasks[k].Task_type == 1 && !tasks[k].completed ) { has_charge_task = true; break; }} if (!has_charge_task ) { for (int j = 0; j < charges.size(); j++) { if (charges[j].charge_available == true) { charges[j].setavailable(false); for (int k = 0; k < tasks.size(); k++) { if (tasks[k].id > max_task_id) { max_task_id = tasks[k].id; } if (tasks[k].Task_type == 1 && tasks[k].priority > max_charge_priority) { max_charge_priority = tasks[k].priority; } } charge_task_id = max_task_id + 1; charge_task_priority = max_charge_priority + 1; Task charge_task(charge_task_id, agvs[i].current_x, agvs[i].current_y, charges[j].charge_x, charges[j].charge_y, charge_task_priority, 0, agvs[i].id_, 1); tasks.push_back(charge_task); break; } } } }爲什麽會一下子增加了兩個充電任務,怎麽修改
时间: 2024-02-24 22:00:37 浏览: 69
根据你的描述,这段代码不应该会一下子增加两个充电任务。可能是在其他地方调用了该代码段,或者是代码逻辑出现了错误导致了重复添加充电任务。
为了防止重复添加充电任务,可以在创建任务之前先检查任务列表中是否已有相同的未完成充电任务,如果有,则不创建新任务,避免重复。另外,也可以在添加充电任务之后对任务列表进行去重操作,确保不会有重复的任务存在。
修改代码可以在创建新任务之前加入如下的检查逻辑,避免重复添加充电任务:
```c++
bool has_same_charge_task = false;
for (int k = 0; k < tasks.size(); k++) {
if (tasks[k].a_id == agvs[i].id_ && tasks[k].Task_type == 1
&& tasks[k].start_x == agvs[i].current_x && tasks[k].start_y == agvs[i].current_y
&& tasks[k].end_x == charges[j].charge_x && tasks[k].end_y == charges[j].charge_y
&& !tasks[k].completed) {
has_same_charge_task = true;
break;
}
}
if (has_same_charge_task) {
continue;
}
```
在添加充电任务之后,还可以对任务列表进行去重操作,去除重复的任务:
```c++
std::sort(tasks.begin(), tasks.end(), [](const Task& a, const Task& b) { return a.id < b.id; });
tasks.erase(std::unique(tasks.begin(), tasks.end(),
[](const Task& a, const Task& b) { return a.id == b.id; }), tasks.end());
```
阅读全文