我目前正在学习Java类简介,目前我们正在学习Arrays主题。我们有一个类实验室,这里假设要创建一个包含两个类(Passenger.java
和Demo.java
)的简单数组程序。数组可以是任意大小(最小4),我们可以将细节硬编码为几个元素。
因此,我在Demo.java
中声明了大小为10的数组,并使用Passenger.java
中的构造函数之一初始化了8个元素的硬代码(使2个元素未初始化)。然后使用for循环和计数器,我确定元素的数量不为null,然后使用计数器值增加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();
}
}
答案 0 :(得分:0)
循环索引值为8之后。
passengers[index++] = new Passenger();
此行执行后,保存在8索引上的乘客对象,之后该索引值为9,因为它是发布增量。所以实际上这件事发生了。
passengers[8] = new Passenger();
index= 8+1;
还有
passengers[9]
为空
并且您正在尝试访问passengers[9].enterDetails()
。这就是为什么您会得到Null指针异常的原因。
答案 1 :(得分:0)
passengers[index++] = ...
passengers[index].enterDetails()
您分配了乘客[8],但由于索引已增加,因此调用enterDetails关于乘客[9]。
passengers[index] = ...
passengers[index].enterDetails()
index++;
答案 2 :(得分:0)
实际上问题出在index ++上,它是后递增的,这意味着索引在新的Passenger()之后递增;被分配给乘客[8]并成为9 并且您得到的是常旅客[index],即常旅客[9] == null
passengers[index++] = new Passenger();
passengers[index].enterDetails()
您都应该使用 passengers [index] ,以便索引不会递增
passengers[index] = new Passenger();
passengers[index].enterDetails()
或乘客[++ index] ,以便在分配之前增加索引
passengerspassengers[++index] = new Passenger();
passengers[index].enterDetails()