[英]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.