gpt4 book ai didi

java - 如何比较数组的相反索引值并根据嵌套 for 循环的条件进行删除?

转载 作者:行者123 更新时间:2023-12-02 11:09:23 24 4
gpt4 key购买 nike

我有一个 Job 对象列表(每个 Job 对象由一个 id(整数)、一个 startTime(浮点)和一个 finishTime(浮点)组成),我正在尝试删除冲突的作业对象。这样我就可以将结束条目与开始条目进行比较,并删除冲突的结束条目。

我有我的代码:

List < Job > sortedJobs = new ArrayList < Job > ();
int SJsize = sortedJobs.size();
for (int i = SJsize - 1; i > 0; i--) {
for (int j = 0; j < SJsize; j++) {
if ((sortedJobs.get(i).getStartTime() > sortedJobs.get(j).getStartTime() &&
sortedJobs.get(i).getStartTime() < sortedJobs.get(j).getFinishTime()) ||
(sortedJobs.get(i).getFinishTime() > sortedJobs.get(j).getStartTime() &&
sortedJobs.get(i).getFinishTime() < sortedJobs.get(j).getFinishTime())) {

sortedJobs.remove(i);
}
}
}

这给了我索引越界错误,但是如果我尝试添加一个 i-- 每次它删除一个元素时,循环似乎不会比较每个元素。我该如何正确地写它?谢谢

最佳答案

在迭代列表时,从列表中删除元素并不是那么简单。查看这篇文章来检查它们:

https://codereview.stackexchange.com/questions/64011/removing-elements-on-a-list-while-iterating-through-it

为了避免此问题,您还可以保存要删除的元素,并在迭代完成后删除它们。

        List < Job > sortedJobs = new ArrayList < Job > ();
int SJsize = sortedJobs.size();
List<Job> jobsToRemove = new ArrayList<>();
for (int i = SJsize - 1; i > 0; i--) {
for (int j = 0; j < SJsize; j++) {
if ((sortedJobs.get(i).getStartTime() > sortedJobs.get(j).getStartTime() &&
sortedJobs.get(i).getStartTime() < sortedJobs.get(j).getFinishTime()) ||
(sortedJobs.get(i).getFinishTime() > sortedJobs.get(j).getStartTime() &&
sortedJobs.get(i).getFinishTime() < sortedJobs.get(j).getFinishTime())) {

//save elements to remove
jobsToRemove.add(sortedJobs.get(i));
}
}
}

//actually remove elements, when iteration over list is finished.
sortedJobs.removeAll(jobsToRemove);

关于java - 如何比较数组的相反索引值并根据嵌套 for 循环的条件进行删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50701845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com