2017-08-11 83 views
-3

我的代码显示不一致的结果。当我运行它时,if操作仅在incoming.get(i).getSubmitionTime()奇数时执行。添加em从ArrayList删除对象后出现错误结果

这是我的代码:

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 

但他们都必须进入状态,准备在同一时间。 我做错了什么?

+0

到底是什么这个代码(混乱)行旨在实现:'incoming.get(I).setSubmitionTime(incoming.get(I).getSubmitionTime() - 1) ;'? – Kon

+2

发布完整代码 – Jeyaprakash

+0

@Kon将其视为'if( - incoming [i] .submitionTime == 0){' – shmosel

回答

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); 
     } 
    } 
}