我正在编写一个程序来跟踪学校的课程和学生。我有学校,教室和学生对象。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList。
我正在尝试在School类中编写一种方法,以使用字符串名称和字符串教室名称作为参数来删除学生。
这是我到目前为止所拥有的:
public void remove( String studentName, String classroomName) {
for(Classroom c : classes) {
if(c.className.equals(classroomName)){
//search for student and remove
for(Student s : students){
if(s.studentName.equals(studentName)){
s.remove(studentName);
}
}
}
}
我认为这不起作用,因为在Classroom类中声明了Student对象的ArrayList。
有没有一种方法可以使用非对象参数在对象ArrayList中搜索元素?
答案 0 :(得分:1)
就像他们告诉您的那样,除非您使用迭代器或使用索引手动控制迭代,否则您无法在对其进行迭代时从列表中删除该元素。
否则,如果您使用的是Java 8,则可以使用:
students.removeIf(s -> s.studentName.equals(studentName));
答案 1 :(得分:0)
正如其他人所指出的,您只能删除带有struct Action {
let name: String
let function: (Character) -> ()
}
let list_weapons: [Int: Action] = [
1: Action(name: "Sword", function: attack_sword),
// and the rest
]
list_weapons[1]!.function(someCharacter)
的元素。您想要这样的东西:
Iterator
您说每个 for(Iterator<Student> it = c.students.iterator(); it.hasNext();)
{
Student s = it.next();
if(s.studentName.equals(studentName))
it.remove();
}
都包含一个Classroom
的列表,所以我假设Students
是您要迭代的对象-您发布的代码使用独立列表{{1 }}。也许是错字?