NullPointerException在预订后显示预订时-Java

我正在为我的活动预订功能,可以成功添加与会者,但是当我想显示每个与会者的详细信息时,它会给我NullPointerException,我不太确定该如何解决。

Main.java

private static Scanner sc = new Scanner(System.in);

private static int eventCreationLimit = 5;
private static Event[] events = new Event[eventCreationLimit];
private static int eventsCreated;

public static void main(String args[]) {
  String input;

        // Main menu.
        do {
            System.out.println("\n~ BOOKING SYSTEM ~");
            System.out.println("------------------");
            System.out.println("A. Schedule an Event");
            System.out.println("B. Add an Attendee");
            System.out.println("C. View Reservations");
            System.out.println("X. Exit\n");

            System.out.print("Select an option: ");
            input = sc.nextLine();

            switch (input.toUpperCase()) {
                case "A":
                    scheduleAnEvent();
                    break;

                case "B":
                    addAttendee();
                    break;

                case "C":
                    displayReservations();
                    break;

                case "X":
                    System.out.println("INFO: You have exited the booking system.");
                    break;

                default:
                    System.out.println("ERROR: Invalid input!");
            }
        } while (!input.equalsIgnoreCase("X"));
}

private static void scheduleAnEvent() {
        System.out.println("\n~ SCHEDULE A EVENT ~");
        System.out.println("--------------------");

        System.out.print("Enter the ID: ");
        String ID = sc.nextLine();

    ...

        System.out.print("Enter the attendee limit: ");
        int attendeeLimit = Integer.parseInt(sc.nextLine());

        // Add the new event to the array.
        events[eventsCreated++] = new Event(ID, ..., attendeeLimit, attendeeLimit, ...);

        for (int i = 0; i < eventsCreated; i++)
            // Set the places available for the specific event being created to subtract it later when an attendee is added.
            if (ID.equals(events[i].getID()))
                // The number of places available left in the event can be displayed by going to "B. View All Events".
                events[i].setPlacesAvailable(attendeeLimit);

        // Give the user a confirmation message.
        System.out.println("\nINFO: Sucessfully created Event: " + ID + ".");
    }

private static void addAttendee() {
  Event event = null;
  boolean result = false;

  System.out.println("\n~ ADD AN ATTENDEE ~");
  System.out.println("-------------------");

  System.out.print("Enter attendee name: ");
  String name = sc.nextLine();

  System.out.print("Enter attendee phone number: ");
  String phone = sc.nextLine();
  Attendee a = new Attendee(name, phone);

  System.out.print("Enter event ID: ");
  String eventID = sc.nextLine();

  // Check if the given ID matches an event.
  for (int i = 0; i < eventsCreated; i++)
    if (events[i].getID().equals(eventID))
      event = events[i];

  if (event != null) {
    if (event.getID().equals(eventID)) {
        result = ((Event) event).addAttendee(a);
        if (result) {
          // If the event has enough room, then add the attendee.
          System.out.println("INFO: Attendee successfully added to Event: " + eventID + ".");
          displayReservations();
        }
        else
          // If the event is full, then the attendee will not be added.
          System.out.println("ERROR: The Event: " + eventID + " is full, the attendee could not be added.");
    } else
      System.out.println("ERROR: The given ID does not match any existing event.");
  } else
    System.out.println("ERROR: The event was not found.");
}

private static void displayReservations() {
  System.out.println("\n~ RESERVATIONS ~");
  System.out.println("----------------");

  String pattern = "%-18s %-18s %-22s %-1s\n";

  System.out.printf(pattern, "NAME", "PHONE", "EVENT ID", "FEE");
  System.out.println("----------------------------------------------------------------");

  // Display all reservations for events.
  for (int i = 0; i < events[i].getAttendeeCount(); i++)
    events[i].displayReservations();
}

Event.java

...
private String ID;
private int attendeeLimit;
private int attendeeCount;
private int placesAvailable;
private Attendee[] a = new Attendee[attendeeCount];

public Demonstration(..., String ID, int placesAvailable, int attendeeLimit, ...) {
    this.ID = ID;
    this.placesAvailable = placesAvailable;
    this.attendeeLimit = attendeeLimit;
}

public String getID() { return this.ID; }
public int getPlacesAvailable() { return this.placesAvailable; }
public int getAttendeeLimit() { return this.attendeeLimit; }

public void setPlacesAvailable(int placesAvailable) { this.placesAvailable = placesAvailable; }

public boolean addAttendee(Attendee at) {
  // Proceed to add the attendee if there is enough room.
  if (attendeeCount <= placesAvailable) {
    attendeeCount++;

    // Decrease the number of places available by one.
    setPlacesAvailable(placesAvailable - 1);
    return true;
  }
  return false;
}

public void displayReservations() {
  System.out.println("ID: " + ID);
  if (attendeeCount > 0)
    for (int i = 0; i < attendeeCount; i++)
      a[i].attendeeDetails();
}

参加者

private String name;
private String phone;

public Attendee(String name, String phone) {
    this.name = name;
    this.phone = phone;
}

public String getName() { return this.name; }

public String getPhone() { return this.phone; }

public void attendeeDetails() {
    System.out.println("Name: " + name);
    System.out.println("Phone: " + phone);
}

The above code gives me a NullPointerException in the displayReservations() method (a[i].attendeeDetails()) whenever I try to add an attendee to an event.

问题:如何显示所有事件的所有预订详细信息?感谢您的帮助!

评论