簡體   English   中英

打印對象數組給出空指針異常

[英]Printing an object array gives null pointer exception

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());
        }
    }
}

我知道這是一個菜鳥問題。 在這里,我省略了其他獲取/設置器部分,以及其他一些我輸入了rollnumber和name值的情況。 我正在嘗試打印對象數組,但它給出了空指針異常。 我只輸入2 3個值,當我嘗試打印時,它會顯示NPE。 我知道這是因為剩余索引位置中的值為空,我只需要一個soln即可打印整個對象數組!

之所以收到NullPointerException是因為private Student[] students=new Student[10]; 這意味着您有一個固定大小為10的Student數組。Java中的默認Object值為null 如果不向數組添加任何內容,則意味着學生中有10個null對象。

如果students數組中的偏移量尚未填充,您將命中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[]來避免此“問題”。 但我無法為您決定是否更有意義。

我更喜歡新的For循環 (自Java 5起)。

for(Student student : this.students) {

}

新的for循環適用於數組和所有可迭代對象,例如ArrayList 您將僅獲得非null對象。

為了回答您的問題,最佳做法是:

在您的學生對象中重寫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根據需要處理空值,並且代碼變得干凈。

您的陣列有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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM