【发布时间】:2021-01-03 21:29:47
【问题描述】:
我是java新手,如果我的解释很差,请见谅,但我有一个清单:
private LinkedList<User> users= new LinkedList<User>();
还有一个方法 removeUser:
private void removeUser() {
System.out.println("All Users: ");
viewUsers();
System.out.print("Please enter the ID of the user to be removed: ");
int choice = In.nextInt();
for (User user : users){
if (users.contains(choice)) {
users.remove(choice);
}
}
}
现在,当我运行代码时,它会成功打印出所有内容。然而,当我检查列表内容时,什么都没有改变,我不确定我在删除部分代码时做错了什么。
【问题讨论】:
-
viewUsers()打印列表吗? -
@Aniox 是的,它会正确打印列表
-
几个问题:(1)
if (users.contains(choice))正在检查包含 User 类型对象的列表是否还包含一些int,这些int永远不会被评估为真。您可能想要更像if(user.getID == choice)的东西。 (2)users.remove(choice);将尝试删除您当前正在迭代的列表中 positionchoice的元素,而不是 ID==choice。 (3) 由于它还会修改您当前正在迭代的列表,您可能会遇到ConcurrentModificationException。您所追求的可能类似于users.removeIf(user->user.getID()==choice)。 -
生活课:你写了
for (User user : users),但你没有在循环内的任何地方使用user。通常,当您编写for-each循环时,这是因为您想对正在迭代的集合的每个项目做一些事情;那就是你没有对user做任何事情是一个警告信号,表明事情不太对劲。
标签: java