初始化元素获取NullPointerException错误

问题描述 投票:0回答:3

我目前正在学习Java类简介,我们目前正在使用Arrays主题。我们有一个类实验室,假设创建一个包含两个类(Passenger.javaDemo.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();
    }
}
java
3个回答
0
投票

实际上问题是索引++是后增量,这意味着索引在新的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()

0
投票

循环索引值为8之后。

passengers[index++] = new Passenger();

在此行执行保存在8索引上的Passenger Object之后,该索引值为9,因为它是后增量。实际上这件事发生了。

passengers[8] = new Passenger();
index= 8+1;

passengers[9]为null,您正在尝试访问passengers[9].enterDetails()。这就是为什么你得到Null指针异常。


0
投票
passengers[index++] = ...
passengers[index].enterDetails()

你分配乘客[8]但随后在乘客上调用enterDetails [9]因为索引增加了。

passengers[index] = ...
passengers[index].enterDetails()
index++;
© www.soinside.com 2019 - 2024. All rights reserved.