逻辑在此方法重载示例中不起作用

Logic doesn't work in this method overloading example

我正在研究 java Pluralsigh.com。下面的代码是我为跟随视频课程而编写的。主题是方法重载。一旦我实施了 hasCarryOnSpace 方法,代码似乎就不会增加乘客人数。在 if 语句之后,我在 add1Passanger(int bags, int carryOns) 方法中调用了这个方法。我还在 add1Passenger(Passanger p, int carryOns) 方法中调用它。请告诉我我的逻辑有什么问题...

public class Flight {

    //fields
    public int passengers;
    private int seats = 150;
    private int checkedBags;
    private int maxCarryOns = checkedBags*2, totalCarryOns;
    private int freeCheckedBags;

    //getter/setters
    public int getSeats(){return 150;}
    public int getCheckedBags() {return this.checkedBags;}

    //constructors
    public Flight (){}  
    public Flight(int freeCheckedBags) {
        this.freeCheckedBags=freeCheckedBags;
    }   
    public Flight(int freeCheckedBags, int checkedBags) {
        this(freeCheckedBags); 
        this.checkedBags=checkedBags;
    }


    //methods   
    public void addPassengers(Passenger... list) {
        if(hasSeats(list.length)) {
            passengers += list.length;
            for(Passenger passanger: list) {
                checkedBags += passanger.getCheckedBags();
            }
        }
        else tooMany(); 
    }

    public void add1Passenger(){
        if(hasSeats())
            passengers +=1;
        else tooMany();
        return;
    }

    public void add1Passanger(int bags){
        if(hasSeats()) {
            add1Passenger();
            this.checkedBags+=bags;
        }
    }

    public void add1Passenger(Passenger p){
        add1Passanger(p.getCheckedBags());
    }

    public void add1Passenger(int bags, int carryOns){
        if(hasSeats() && hasCarryOnSpace(carryOns)){
            add1Passanger(bags);
            totalCarryOns+=carryOns;
        }
    }

    public void add1Passenger(Passenger p, int carryOns){
        add1Passenger(p.getCheckedBags(), carryOns);
    }

    public boolean hasCarryOnSpace(int carryOns){
        return totalCarryOns+carryOns < maxCarryOns;
    }

    public boolean hasSeats(){
        return passengers < getSeats();
    }

    private boolean hasSeats(int count) {
        return passengers+count <= seats;
    }

    private void tooMany(){
        System.out.println("no more seats available");
    }

    //main method
    public static void main(String[] args ){
        Flight usAir = new Flight();
        //i have a separate Passenger class created w/ freeBags as first
        //parameter and checkedBags as the second in its constructors
        Passenger bob = new Passenger();
        Passenger jean = new Passenger(0, 1);       
        Passenger nick = new Passenger(0, 2);
        Passenger dan = new Passenger(2,2);

        usAir.addPassengers(bob, jean);
        usAir.add1Passenger(dan);
        usAir.add1Passenger();
        usAir.add1Passanger(2);
        //calls below don't increment the passenger count
        usAir.add1Passenger(nick, 2);
        usAir.add1Passenger(1, 1);
        System.out.println("usAir has " + usAir.passengers 
                + " passengers " + "with " + usAir.getCheckedBags()+
                " checked bags,"+" "+usAir.freeCheckedBags
                +" free bags, and "+usAir.totalCarryOns+" carryOns on board");
   }
}

虽然代码对于这种情况应该更加简洁明了..它只是第一次猜测在 Flight 构造中将 0 分配给 passenger

请看下面的代码。阅读评论以获取解释。代码的目的不仅仅是为了回答问题,也是为了展示MCVE的思想。
通过发布 MCVE,您更有可能获得更好更快的帮助,而且更重要的是:在许多情况下,它可以帮助您自己找到问题。

public class Flight {

    //fields
    public int passengers;
    private int seats = 150;
    private int checkedBags;

    //The problem is here:  maxCarryOns in intialized to 0.
    //private int maxCarryOns = checkedBags*2;
    //change to say:
    private int maxCarryOns = seats*2;

    private int totalCarryOns;
    private int freeCheckedBags;

    //getter/setters
    public int getSeats(){return 150;}
    public int getCheckedBags() {return checkedBags;}

    //constructors
    public Flight (){}

   //removed 2 more constructors , not needed to demonstrate the problem


    //methods

    //removed, not needed to demonstrate the problem
    //public void addPassengers(Passenger... list) {

    public void add1Passenger(){
        if(hasSeats()) {
            passengers +=1;
        } else {
            tooMany();
        }
        return;
    }

    public void add1Passanger(int bags){
        if(hasSeats()) {
            add1Passenger();
            checkedBags+=bags;
        }
    }

    //removed, not needed to demonstrate the problem
    //public void add1Passenger(Passenger p)

    public void add1Passenger(int bags, int carryOns){

        if(hasSeats() && hasCarryOnSpace(carryOns)){

            add1Passanger(bags);
            totalCarryOns+=carryOns;
        }
    }

    public void add1Passenger(Passenger p, int carryOns){

        add1Passenger(p.getCheckedBags(), carryOns);
    }

    public boolean hasCarryOnSpace(int carryOns){

        //a simple printout here would hae revealed that 
        //maxCarryOns was 0, hencethis methos always returned false.
        return (totalCarryOns+carryOns) < maxCarryOns;
    }

    public boolean hasSeats(){

        return passengers < getSeats();
    }

    //removed, not needed to demonstrate the problem
    //private boolean hasSeats(int count) {

    private void tooMany(){
        System.out.println("no more seats available");
    }

    //main method
    public static void main(String[] args ){

        Flight usAir = new Flight();

        //removed all statements which are not needed to demonstrate the problem
        Passenger nick = new Passenger(0,2);

        //calls below don't increment the passenger count
        usAir.add1Passenger(nick, 2);
        usAir.add1Passenger(1, 1);
        System.out.println("usAir has " + usAir.passengers
                + " passengers " + "with " + usAir.getCheckedBags()+
                " checked bags,"+" "+usAir.freeCheckedBags
                +" free bags, and "+usAir.totalCarryOns+" carryOns on board");
   }
}

//include all needed to run the code
class Passenger {

    int freeBags =0, checkedBags =0;

    Passenger(int freeBags, int checkedBags){

        this.freeBags = freeBags;
        this.checkedBags = checkedBags;
    }

    /**
     *@return
     */
    public int getCheckedBags() {

        return  checkedBags;
    }
}