【问题标题】:Wrong result after add em remove object from ArrayList从 ArrayList 添加 em 删除对象后结果错误
【发布时间】:2018-01-20 08:32:29
【问题描述】:

我的代码显示不一致的结果。当我运行它时,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.get(i).setSubmitionTime(incoming.get(i).getSubmitionTime() - 1);?
  • 贴出完整代码
  • @Kon 认为它是if(--incoming[i].submitionTime == 0) {
  • 您是否在代码中遇到任何错误,如果是,您可以在这里发布吗
  • 无论如何你的问题是完全不清楚的。您假设我们对您的代码的了解比我们实际了解的多得多。例如,您正在询问您的输出,但您的代码甚至没有打印语句。请发帖minimal reproducible example

标签: java object arraylist process conditional


【解决方案1】:

发生这种情况是因为当您调用 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);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2021-03-11
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多