Java 为什么我在这个程序中遇到空指针异常?

Java 为什么我在这个程序中遇到空指针异常?,java,nullpointerexception,Java,Nullpointerexception,我是Java新手,有人能解释为什么我会遇到空指针异常吗? 此外,除了扫描仪,任何人都可以解释其他可靠的输入方法 错误 线程主java.lang.NullPointerException中出现异常 在剧院。主剧院。爪哇:18 您需要填充Scrrens数组。换句话说,您只初始化了Scrren数组,但从未初始化过它的元素。如果您不初始化它的元素,它们将获得默认值,在本例中为null。猜猜在null上调用somemethod时会发生什么。砰的一声,你得到了NPE Screens[] X = new Sc

我是Java新手,有人能解释为什么我会遇到空指针异常吗? 此外,除了扫描仪,任何人都可以解释其他可靠的输入方法

错误

线程主java.lang.NullPointerException中出现异常

在剧院。主剧院。爪哇:18

您需要填充Scrrens数组。换句话说,您只初始化了Scrren数组,但从未初始化过它的元素。如果您不初始化它的元素,它们将获得默认值,在本例中为null。猜猜在null上调用somemethod时会发生什么。砰的一声,你得到了NPE

Screens[] X = new Screens[5];
x[0] = new Screen();

虽然初始化数组X,但不会初始化其成员,因此在执行X[Screen-1]时,即使索引位于bounderies中,也使用空对象

因为数组X中没有任何元素,所以默认情况下每个元素都初始化为null。因此,基本上您正在尝试执行null.bookseat,这将导致NullPointerException


同样重要的是要注意,如果Screen为5,这是您的条件所允许的,您会得到一个NullPointerException,因为您声明了一个数组来容纳5个Screen对象,但是您从未用实际的Screen对象初始化过5个插槽

因此,当您尝试使用

X[Screen-1].bookSeat();
您正在引用数组中的null元素,当然不能调用null对象的方法

您可以在使用对象和初始化屏幕之前添加检查

if(Screen >= 1 && Screen <= 4) {
    if (X[Screen-1] == null) 
       X[Screen-1] = new Screens();

    X[Screen-1].bookSeat();
}
你的用法也有点奇怪。数组从零索引开始,但您使用零作为退出程序的值,因此从不使用索引零处的元素。

正在创建数组X,但元素未初始化,它们仍然为空。我认为您希望将数组初始化为如下所示:

Screens[] X = new Screens[5];
for (int x = 0; x < 5; x++) {
    X[x] = new Screens();
}

因为在屏幕[]之后X=新屏幕[5];数组X的所有5个元素都为空

填充屏幕阵列的另一种方法

Screens[] X = { new Screens(), new Screens(), new Screens(),new Screens(), new Screens() };

您可能会发现使用“来自集合”更有用

我不能理解,例如C++中,如果我有一个类叫做屏幕,我有一个声明,比如屏幕X [5 ];这意味着X是屏幕类的对象数组,大小为5,那么这个X[X]是什么??请详细说明。对不起,但是如何初始化?举个例子也许会有帮助。谢谢,我没注意到。
Screens[] X = { new Screens(), new Screens(), new Screens(),new Screens(), new Screens() };