添加 em 从 ArrayList 中删除对象后的错误结果
Wrong result after add em remove object from ArrayList
我的代码显示了不一致的结果。当我运行它时,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.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);
}
}
}
我的代码显示了不一致的结果。当我运行它时,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.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);
}
}
}