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,那么它再次循环的时候会找不到已经删除的元素,就产生了错误!
如果我们要删除多个元素怎么办?
只需要在循环的时候不删除元素,只记录下元素就可以了,然后循环结束时再删除即可!
没有评论:
发表评论