我有一种方法可以从一系列学生中删除学生。 这是我到目前为止所做的,但似乎没有用。
public Student[] removeStudent(Student s) throws Exception{
boolean found = false;
for(int i = 0; i < nrStudents(this); i++){
if(students[i].equals(s)){
students[i] = null;
found = true;
break;
}
}
if (found == true){
return compact(students);
}
else
throw new Exception("Student Not Found.");
}
private Student[] compact(Student[] arr){
ArrayList<Student> list = new ArrayList<Student>();
for (Student s : arr){
if (!s.equals(null))
list.add(s);
}
arr = list.toArray(new Student[list.size()]);
return arr;
}
当我在数组中有2个或更多学生时,我得到一个NullPointerException。如何从该阵列中删除学生?
答案 0 :(得分:3)
不要使用.equals()来检查null - 要修复代码,请将if(!s.equals(null))
行更改为if (s != null)
。
为什么?
Java null check why use == instead of .equals()
使用ArrayList对此问题更有意义。我建议查阅 - 有几个很好的用法示例和来源。
答案 1 :(得分:0)
我很确定你必须将除空数据之外的所有数据复制到一个全新的数组。鉴于这是一项代价高昂的操作,我推荐使用ArrayLists http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html
使用arraylist,您可以获得能够通过索引引用的好处,但您也可以使用以下命令删除元素:
if(node.data==null) {
remove(node);
}
答案 2 :(得分:0)
以下内容:
if (!s.equals(null))
应该阅读
if (s != null)
答案 3 :(得分:0)
这就是我所做的解决方法
private Student[] compact(Student[] arr){
Student[] stud = new Student[arr.length];
int count = 0;
for(int i = 0; i < arr.length; i++){
if(arr[i] != null){
stud[count] = arr[i];
count++;
}
}
students = stud;
return students;
}
我首先将学生设置为null,并且我使用紧凑的辅助方法来压缩数组,因此它没有空元素。