在java中删除数组中的null元素

时间:2013-01-21 18:40:50

标签: java

我有一种方法可以从一系列学生中删除学生。 这是我到目前为止所做的,但似乎没有用。

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。如何从该阵列中删除学生?

4 个答案:

答案 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,并且我使用紧凑的辅助方法来压缩数组,因此它没有空元素。