2009年8月20日星期四

[BugFixed]解决昨天遇到的一个问题

昨天遇到了一个问题:

                       for (Room r:RoomMap.roomList) {
System.out.println("for started");
if (name.equals(r.getRoomName())) {
// TODO 让房间内的用户强行退出房间(可选)
// 关闭房间
r.clear();
r.setOpen(false);
RoomMap.roomList.remove(r);
}
System.out.println("if closed");
}
System.out.println("for closed");

这个程序看似没问题,但是运行到System.out.println("if closed");之后就无法执行出错了。而在RoomMap.roomList.remove(r);加了break之后就可以正确运行了!

先感谢下图图的解答!

原因在于roomList是Vector<Room>类型的。而Vector类型有一套自己的机制(List的子类都有),在循环过程中删除其中一个元素之后,如果不break,那么它再次循环的时候会找不到已经删除的元素,就产生了错误!

如果我们要删除多个元素怎么办?

只需要在循环的时候不删除元素,只记录下元素就可以了,然后循环结束时再删除即可!

没有评论: