打印对象数组会产生空指针异常

时间:2015-12-22 15:10:32

标签: java arrays object exception printing

public class StudentSchedular {

    private Student[] students=new Student[10];
    private int counterStudent;

    public String addStudent(int rollNumber,String name)
    {
        students[counterStudent++]=new Student(rollNumber,name);

        return "Student added successfully";
    }

    public void showAllStudents()
    {
        for(int i=0;i<students.length;i++){
            System.out.println(students[i].getRollNumber());
            System.out.println(students[i].getName());
        }
    }
}

我知道这是一个菜鸟问题..但仍然! 这里我省略了其他getter / setter部分以及我输入rollnumber和name的值的其他情况。我试图打印对象数组,但它给出一个空指针异常。我只输入2 3个值,当我尝试打印时,它会给出NPE。我知道这是因为空值在剩余的索引位置,我只需要一个soln来打印整个对象数组!

3 个答案:

答案 0 :(得分:1)

您获得NullPointerException的原因是private Student[] students=new Student[10];。这意味着您有一个Student数组,其大小固定为10. Java中的默认Object值为null。如果不向数组添加任何内容,则意味着学生中有10个null个对象。

如果学生数组中的偏移量尚未填充,您将获得空值并获得异常,因为您尝试在null上调用方法。

您可以在循环中验证它:

        for(int i=0;i<students.length;i++){
            if(students[i] instanceof User) {
                System.out.println(students[i].getRollNumber());
                System.out.println(students[i].getName());
            }
        }

编辑:使用List<User>代替User[]可以避免此“问题”。但如果它更有意义,我无法决定你。

答案 1 :(得分:1)

我更喜欢新的 For循环(自Java 5起)。

for(Student student : this.students) {

}

新的for循环适用于arrays and all iterables objects, like ArrayList。您将只获得非空对象。

要回答您的问题,最佳做法是:

覆盖学生对象中的toString()

@Override
public void String toString(){
    StringBuilder stringBuilder = new StringBuilder();

    stringBuilder.append(this.rollNumber);
    stringBuilder.append(this.name);

    return stringBuilder.toString();
}

在你的循环中,只需做

System.out.println(stundents[i]);

println 可以根据需要处理空值,并且代码变得干净。

答案 2 :(得分:0)

你的阵列有10个插槽。如果给出3个值,那么你有7个空值的插槽。您需要更改正在使用的数据结构类型,或在打印时检查空值。下面的代码将进行空检查,然后打印数组中的哪个索引包含空值。

public void showAllStudents()
{
    for(int i=0;i<students.length;i++)
    {
        if(students[i] != null) {
            System.out.println(students[i].getRollNumber());
            System.out.println(students[i].getName());
        }

        else
        {
            System.out.println("Array is null at index: " + i);
        }
    }
}