这是一个更大的任务的一部分,我对Java和编程都是全新的。我是系统和网络管理员,而不是开发人员。因此,诸如“studentId作为int会更好”之类的东西没有用,因为String是赋值的必要条件。
我需要根据studentId从Student对象中删除一个对象。我在StackOverflow上找到了从对象的ArrayList中删除对象的代码,它主要起作用。我遇到的问题是,如果对象不存在,我希望能够创建一些说该对象不存在的东西。目前,在删除正确的对象(在我的示例中为studentId为“3”)之后,它将继续删除数组中的最后一个对象,直到不再有索引为3的对象。显然,我没有一个线索,为什么。
public static void remove(String sdId){
Iterator<Student> it = studentList.iterator();
while(it.hasNext()) {
Student id = it.next();
if(id.getStudentId().equals(sdId)) {
it.remove();
}
}
}
正在调用:
public static void main(String args[]) {
studentList = new ArrayList();
populateStudents(); // convert array of strings to ArrayList of student objects
((Student)studentList.get(0)).print();
((Student)studentList.get(1)).print();
((Student)studentList.get(2)).print();
((Student)studentList.get(3)).print();
((Student)studentList.get(4)).print();
System.out.println();
remove("3");
((Student)studentList.get(0)).print();
((Student)studentList.get(1)).print();
((Student)studentList.get(2)).print();
((Student)studentList.get(3)).print();
System.out.println();
remove("3");
((Student)studentList.get(0)).print();
((Student)studentList.get(1)).print();
((Student)studentList.get(2)).print();
}
正在输出:
1 First Name: John Last Name: Smith E-mail: John1989@gmail.com Age: 20 Grades: {88, 79, 59} 2 First Name: Suzan Last Name: Erickson E-mail: Erickson_1990@gmailcom Age: 19 Grades: {91, 72, 85} 3 First Name: Jack Last Name: Napoli E-mail: The_lawyer99yahoo.com Age: 19 Grades: {85, 84, 87} 4 First Name: Erin Last Name: Black E-mail: Erin.black@comcast.net Age: 22 Grades: {91, 98, 82} 5 First Name: John Last Name: Reid E-mail: JohnReid@WGU.edu Age: 44 Grades: {98, 99, 98} 1 First Name: John Last Name: Smith E-mail: John1989@gmail.com Age: 20 Grades: {88, 79, 59} 2 First Name: Suzan Last Name: Erickson E-mail: Erickson_1990@gmailcom Age: 19 Grades: {91, 72, 85} 4 First Name: Erin Last Name: Black E-mail: Erin.black@comcast.net Age: 22 Grades: {91, 98, 82} 5 First Name: John Last Name: Reid E-mail: JohnReid@WGU.edu Age: 44 Grades: {98, 99, 98} 1 First Name: John Last Name: Smith E-mail: John1989@gmail.com Age: 20 Grades: {88, 79, 59} 2 First Name: Suzan Last Name: Erickson E-mail: Erickson_1990@gmailcom Age: 19 Grades: {91, 72, 85} 4 First Name: Erin Last Name: Black E-mail: Erin.black@comcast.net Age: 22 Grades: {91, 98, 82}
在最后一组版画中,如果我第四次调用它,我会得到一个outOfBounds。我没有为输出创建一个循环,因为它只是用于测试而不是实际使用的东西 - 我还没有创建该函数。
答案 0 :(得分:0)
如果要根据ID删除学生对象。我会假设您每次调用remove方法时都要删除one and only one
学生。
因此,您不应该使用while循环来遍历列表。 for循环适用于获取包含您要删除的ID的学生对象。
public static void remove(String sdId){
Student stud = null;
for(Student s : studentList){
if(s.getStudentId().equals(sdId))
stud = s;
}
if(stud != null)
studentList.remove(stud);
else
System.out.println("ID does not exist."); //optional
}
这将确保您只删除1名学生,如果该ID不存在,则删除方法不执行任何操作。当然,您也可以使用迭代器遍历列表。