我從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");
}
}
private int maxCarryOns = checkedBags * 2,totalCarryOns; 看起來像它將爲0,因爲checkBags是一個未初始化的int(因此爲0),當代碼到達此行時。 –
這個代碼真的有很多錯誤。例如,有150個座位的事實存儲在兩個獨立的地方,這兩個地方都被引用。 –
你確定它應該是'add1Passanger'而不是'add1Passenger'嗎?記住,拼寫很重要。 – Makoto