2017-08-11 116 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); 
     } 
    } 
}