2017-08-11 4 views
-3

私のコードは、矛盾した結果を示しています。私がそれを実行すると、incoming.get(i).getSubmitionTime()が奇数のときにif演算が実行されます。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); 
     } 
    } 
} 
関連する問題