2016-09-03 21 views
-2

我從Pluralsigh.com sudui java。下面的代碼是我寫的,以跟隨視頻課程。主題是方法重載。我實現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"); 
    } 
} 
+1

private int maxCarryOns = checkedBags * 2,totalCarryOns; 看起來像它將爲0,因爲checkBags是一個未初始化的int(因此爲0),當代碼到達此行時。 –

+0

這個代碼真的有很多錯誤。例如,有150個座位的事實存儲在兩個獨立的地方,這兩個地方都被引用。 –

+0

你確定它應該是'add1Passanger'而不是'add1Passenger'嗎?記住,拼寫很重要。 – Makoto

回答

0

請參閱下面的代碼。閱讀評論的解釋。代碼的目的不僅僅是回答這個問題,而且還展示了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; 
    } 
} 
-1

雖然代碼應該是多少簡潔,乾淨爲這種情況..它只是第一個猜測0賦給passengerFlight建設

+0

這是錯誤的。問題是,maxCarryOns設置爲0。 – c0der