添加em从ArrayList删除对象后出现错误结果
问题描述:
我的代码显示不一致的结果。当我运行它时,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
但他们都必须进入状态,准备在同一时间。 我做错了什么?
答
发生这种情况是因为当您致电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);
}
}
}
到底是什么这个代码(混乱)行旨在实现:'incoming.get(I).setSubmitionTime(incoming.get(I).getSubmitionTime() - 1) ;'? – Kon
发布完整代码 – Jeyaprakash
@Kon将其视为'if( - incoming [i] .submitionTime == 0){' – shmosel