我目前正在学习Java类简介,我们目前正在使用Arrays主题。我们有一个类实验室,假设创建一个包含两个类(Passenger.java
和Demo.java
)的简单数组程序。该数组可以是任何大小(最小4),我们可以将细节硬编码为几个元素。
所以我在Demo.java
中声明了大小为10的数组,并且我使用Passenger.java
中的一个构造函数初始化/硬编码8个元素(留下2个元素未初始化)。然后使用for循环和计数器I确定元素的数量不为空,并且在计数器值增加1的情况下初始化剩余元素(例如,passengers[index++] = new Passenger()
)。
但是,当我在初始化新初始化元素后尝试调用方法时,我得到了java.lang.NullPointerException
错误。所以我通过调用精确索引测试,它是8(passengers[8] = new Passenger()
),然后再次调用该方法,它的工作原理。
因此我可能知道我的代码的哪一部分有问题。
注意:
乘客舱
import java.util.Scanner;
public class Passenger {
private String title;
private String firstName;
private String lastName;
public Passenger() {
}
public Passenger(String title, String firstName, String lastName) {
this.title = title;
this.firstName = firstName;
this.lastName = lastName;
}
public void enterDetails() {
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter your title: ")
title = keyboard.next();
System.out.print("Enter your first name: ")
firstName = keyboard.next();
System.out.print("Enter your last name: ")
lastName = keyboard.next();
}
}
演示课程
public class Demo {
public static void main(String[] args) {
Passenger[] passengers = new Passenger[10];
passengers[0] = new Passenger("Mr", "Benjamin", "Parker");
passengers[1] = new Passenger(....);
passengers[2] = new Passenger(....);
passengers[3] = new Passenger(....);
passengers[4] = new Passenger(....);
passengers[5] = new Passenger(....);
passengers[6] = new Passenger(....);
passengers[7] = new Passenger(....);
int index = 0;
for (int i = 0; i < passengers.length; i++) {
if (passengers[i] != null)
index++;
}
passengers[index++] = new Passenger();
passengers[index].enterDetails();
}
}
实际上问题是索引++是后增量,这意味着索引在新的Passenger()之后递增;被分配给乘客[8]并成为9并且您正在获得乘客[index]乘客[9] == null
passengers[index++] = new Passenger();
passengers[index].enterDetails()
要么你应该使用乘客[索引],以便索引不会增加
passengers[index] = new Passenger();
passengers[index].enterDetails()
或者乘客[++ index]以便在分配之前递增索引
passengerspassengers[++index] = new Passenger();
passengers[index].enterDetails()
循环索引值为8之后。
passengers[index++] = new Passenger();
在此行执行保存在8索引上的Passenger Object之后,该索引值为9,因为它是后增量。实际上这件事发生了。
passengers[8] = new Passenger();
index= 8+1;
和
passengers[9]
为null,您正在尝试访问passengers[9].enterDetails()
。这就是为什么你得到Null指针异常。
passengers[index++] = ...
passengers[index].enterDetails()
你分配乘客[8]但随后在乘客上调用enterDetails [9]因为索引增加了。
passengers[index] = ...
passengers[index].enterDetails()
index++;