0

I'm working on a project that involves three code files: a class for passengers - Passenger.java, a class for the airplane itself - Airplane.java, and a driver class - RunAirplane.java. 5 passengers have been added using the Passenger instantiation in main along with a count of the passengers that I plan on updating later so it is not limited to 5. The issue is that I keep getting a NullPointerException error whenever I run the main file in IntelliJ and cant find out why. The error code says it's happening on line 58 of the Airplane.java file which leads me to assume that it's because of the addPassenger method.

Passenger Class (if needed)

public class Passenger {

    private String name;
    private int  birthYear;
    private double weight;
    private char gender;
    private int numCarryOn;

    //Default constructor
    public Passenger(){
        name = "";
        birthYear = 1900;
        weight = 0.0;
        gender = 'u';
        numCarryOn = 0;
    }

    //Alt default constructor
    public Passenger(String newName, int newBirthYear, double newWeight, char newGend, int newNumCarryOn){

        this.setName(newName);
        this.setBirthYear(newBirthYear);
        this.setWeight(newWeight);
        this.setGender(newGend);
        this.setNumCarryOn(newNumCarryOn);
    }

    //Calculate age
    public int calculateAge(int currentYear){

        int age = 0;

        if (currentYear < birthYear){
            return -1;
        }
        else {
           age = currentYear - birthYear;
        }

        return age;
    }

    //Gain weight
    public void gainWeight(){
        weight += 1;
    }

    //Gain weight based on input
    public void gainWeight(double pounds){

        if (weight > 0){
            weight = weight + pounds;
        }

    }

    //Get birthYear
    public int getBirthYear(){
        return birthYear;
    }

    //Get gender
    public char getGender(){
        return gender;
    }

    //Get name
    public String getName(){
        return name;
    }

    //Get weight
    public double getWeight(){
        return weight;
    }

    //Get numCarryOn
    public int getNumCarryOn(){
        return numCarryOn;
    }

    //isFemale
    public boolean isFemale(){

        if (gender == 'f'){
            return true;
        }
        else {
            return false;
        }
    }

    //isMale
    public boolean isMale(){
        if (gender == 'm'){
            return true;
        }
        else {
            return false;

        }
    }

    //loseWeight
    public void loseWeight(){

        if (weight > 0){
            weight -= 1;
        }

    }

    //lose weight by value
    public void loseWeight(double weight2lose){

        if (weight - weight2lose >= 0){
            weight -= weight2lose;
        }

    }

    //print
    public void printDetails(){

        System.out.printf("Name: %20s | Year of Birth: %4d | Weight: %10.2f | Gender: %c | NumCarryOn: %2d\n", name, birthYear, weight, gender, numCarryOn);

    }

    //setGender
    public void setGender(char newGender){

        if (newGender == 'f' || newGender == 'm') {
            this.gender = newGender;
        } else {
            this.gender = 'u';
        }
    }

    //setName
    public void setName(String newName){
        name = newName;
    }

    //setBirthYear
    public void setBirthYear(int newBY){
        birthYear = newBY;
    }

    //setWeight
    public void setWeight(double newWeight){

        if (newWeight < 0){
            weight = -1;

        }
        else {
            weight = newWeight;
        }

    }

    //setNumCarryOn
    public void setNumCarryOn(int newNumCarryOn){

        if (newNumCarryOn < 0){
            numCarryOn = 0;

        }
        else if (newNumCarryOn > 2){
            numCarryOn = 2;
        }
        else {
            numCarryOn = newNumCarryOn;
        }
    }
}

Airplane Class

import java.util.Arrays;

public class Airplane {

    private Passenger[] passengers;
    private String airplaneName;
    private int numPassengers;
    public int count = 0;

    //default constructor
    public Airplane(){

        airplaneName = "";
        passengers = new Passenger[100];
        numPassengers = 0;
    }

    //default constructor with String input
    public Airplane(String otherairplaneName){

        airplaneName = otherairplaneName;
        passengers = new Passenger[100];
        numPassengers = 0;

    }

    //default constructor with int input
    public Airplane(int otherArraySize){

        airplaneName = "";

        if (otherArraySize < 0){
            otherArraySize = 0;
            passengers = new Passenger[otherArraySize];
        }

        numPassengers = 0;

    }

    //default constructor with String and int input
    public Airplane(String otherAirplaneName, int otherArraySize){

        airplaneName = otherAirplaneName;

        if (otherArraySize < 0){
            otherArraySize = 0;
            passengers = new Passenger[otherArraySize];
        }

        numPassengers = 0;

    }

    //add a passenger
    public void addPassenger(Passenger a){

        for (int i = 0; i < passengers.length; i++){

            if (passengers.length - count >= 0){
                passengers[i] = a;
                break;
            }

        }
    }
}

Driver

public class RunAirplane {
    public static void main(String[] args) {
        Airplane a1 = new Airplane("Flight 1", 100);
        Passenger p1 = new Passenger("Albert", 1879, 198.5, 'm', 2);
        Passenger p2 = new Passenger("Grace", 1906, 105, 'f', 1);
        Passenger p3 = new Passenger("Tim", 1955, 216.3, 'm', 2);
        Passenger p4 = new Passenger("Steve", 1955, 160, 'm', 2);
        Passenger p5 = new Passenger("Sergey", 1973, 165.35, 'm', 1);

        a1.addPassenger(p1);
        a1.count += 1;
        a1.addPassenger(p2);
        a1.count += 1;
        a1.addPassenger(p3);
        a1.count += 1;
        a1.addPassenger(p4);
        a1.count += 1;
        a1.addPassenger(p5);
        a1.count += 1;
        a1.printAllDetails();

    }
}
m119
  • 21
  • 3

1 Answers1

0

You are trying to access the global variable passengers which is getting initialized only when the parameter otherArraySize is smaller than 0 as specified in the constructor that you are using. Try reversing the condition for that parameter. This way your array would initialize.

public Airplane(String otherAirplaneName, int otherArraySize){

        airplaneName = otherAirplaneName;

        if (otherArraySize > 0){
            otherArraySize = 0;
            passengers = new Passenger[otherArraySize];
        }

        numPassengers = 0;

    }
Syed A.
  • 186
  • 2
  • 13