添加 em 从 ArrayList 中删除对象后的错误结果

Wrong result after add em remove object from ArrayList

我的代码显示了不一致的结果。当我运行它时,if操作只在incoming.get(i).getSubmitionTime()为奇数时执行。

这是我的代码:

public void decrementIncoming () {
    for (int i = 0; i < incoming.size(); i++) {
        incoming.get(i).setSubmitionTime(incoming.get(i).getSubmitionTime() - 1);
        if (incoming.get(i).getSubmitionTime() == 0 ) {
            Process p = incoming.get(i);                
            incoming.remove(i);
            ready.add(p);
        }
    }
}

结果是

----- Time 6 -----
----- Running -----
1 : 5
----- Ready -----
3 : 6
5 : 6
7 : 8
----- Blocked -----
----- Incoming -----
2 : 6
4 : 6
6 : 8
8 : 8

但是所有这些都必须同时进入准备就绪状态。 我做错了什么?

发生这种情况是因为当您调用 incoming.remove(i); 时,您还需要减少 i 计数器。但更好的解决方案是使用迭代器:

public void decrementIncoming () {

    Iterator<Process> processIterator = incoming.iterator();
    while (processIterator.hasNext()) {
        Process process = processIterator.next();
        process.setSubmitionTime(process.getSubmitionTime() - 1);
        if (process.getSubmitionTime() == 0 ) {                
            processIterator.remove();
            ready.add(process);
        }
    }
}