初始化的元素收到NullPointerException错误

时间:2019-03-30 10:22:35

标签: java

我目前正在学习Java类简介,目前我们正在学习Arrays主题。我们有一个类实验室,这里假设要创建一个包含两个类(Passenger.javaDemo.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();
    }
}

3 个答案:

答案 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()