Java 预订应用程序中的NullPointerException

Java 预订应用程序中的NullPointerException,java,exception,null,nullpointerexception,Java,Exception,Null,Nullpointerexception,我在以下位置收到一个NullPointerException: If(bookingList.size() == 0) , 及 我不确定是什么原因造成的。非常感谢您的帮助 堆栈跟踪 预订例外 轮渡系统 公共级渡船系统{ 私有静态ArrayList bookingList; 专用静态扫描仪userInput=新扫描仪(System.in); 公共渡船系统(){ bookingList=newarraylist(); } 公共静态整型bookingIDExists(字符串ID){ if(booki

我在以下位置收到一个
NullPointerException

If(bookingList.size() == 0)
,

我不确定是什么原因造成的。非常感谢您的帮助

堆栈跟踪 预订例外 轮渡系统
公共级渡船系统{
私有静态ArrayList bookingList;
专用静态扫描仪userInput=新扫描仪(System.in);
公共渡船系统(){
bookingList=newarraylist();
}
公共静态整型bookingIDExists(字符串ID){
if(bookingList.size()=0)
返回-1;
对于(int i=0;i
预订列表的初始化从常规构造函数移动到静态初始化块:

static {
    bookingList = new ArrayList<VehicleBooking>();
}
静态{
bookingList=newarraylist();
}
或在声明时对其进行初始化:

private static ArrayList<VehicleBooking> bookingList = new ArrayList<VehicleBooking>();
private static ArrayList bookingList=new ArrayList();

否则,
bookingList
将保持
null
,直到第一次调用
FerryBookingSystem
的构造函数。

bookingList
的初始化从常规构造函数移到静态初始化块:

static {
    bookingList = new ArrayList<VehicleBooking>();
}
静态{
bookingList=newarraylist();
}
或在声明时对其进行初始化:

private static ArrayList<VehicleBooking> bookingList = new ArrayList<VehicleBooking>();
private static ArrayList bookingList=new ArrayList();
否则,
bookingList
将保持
null
,直到第一次调用
FerryBookingSystem
的构造函数。

您的代码位于:

private static ArrayList<VehicleBooking> bookingList;
私有静态数组列表bookingList;
尚未初始化。请将其初始化。

您的代码位于:

private static ArrayList<VehicleBooking> bookingList;
私有静态数组列表bookingList;

尚未初始化。请初始化它。

bookingList是FerryBookingSystem的静态属性

您可以在构造函数中初始化它,这对于静态属性来说是无意义的

然后,您永远不会调用构造函数,因为您永远不会实例化Ferrybooking系统

编辑:

在深入研究代码之后,似乎您首先将bookingList声明为static,然后将所有方法标记为static,以解决编译问题

我不认为您真的需要该属性是静态的,所以只需删除属性和所有方法上的静态键:

public class FerryBookingSystem {
    private ArrayList<VehicleBooking> bookingList;
并调用此实例的方法:

    switch (user){
        case 'A':
            fbs.addVehicleBooking();
            break;
        case 'B':
           fbs.addRecreationalVehicleBooking();
            break;
        case 'C':
           fbs.displayBookingSummary();

bookingList是Ferrybooking系统的静态属性

您可以在构造函数中初始化它,这对于静态属性来说是无意义的

然后,您永远不会调用构造函数,因为您永远不会实例化Ferrybooking系统

编辑:

在深入研究代码之后,似乎您首先将bookingList声明为static,然后将所有方法标记为static,以解决编译问题

我不认为您真的需要该属性是静态的,所以只需删除属性和所有方法上的静态键:

public class FerryBookingSystem {
    private ArrayList<VehicleBooking> bookingList;
public static void main (String [] args) throws IOException{
    char user;
    FerryBookingSystem fbs=new FerryBookingSystem();
    switch (user){
        case 'A':
            fbs.addVehicleBooking();
            break;
        case 'B':
           fbs.addRecreationalVehicleBooking();
            break;
        case 'C':
           fbs.displayBookingSummary();