2016-09-03 5 views
-2

Ich bin Java von der Pluralsigh.com Sudying. Code unten ist von mir geschrieben, um den Videounterricht zu folgen. Das Thema ist das Überladen von Methoden. Der Code scheint die Passagierzahl nicht zu erhöhen, sobald ich die Methode hasCarryOnSpace implementiert habe. Ich rufe diese Methode innerhalb der Methode add1Passanger (int bags, int carryOns) nach der if-Anweisung auf. Ich nenne es auch in der Methode add1Passenger (Passanger p, int carryOns). Bitte sagen Sie mir, was mit meiner Logik falsch ist ...Logik funktioniert nicht in dieser Methode Überladung Beispiel

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

privat int maxCarryOns = checkedBags * 2, totalCarryOns; sieht so aus, als wäre es 0 als checkedBags ist ein nicht initialisiertes int (und daher 0), wenn der Code diese Zeile erreicht. –

+0

Es ist ziemlich viel falsch mit diesem Code wirklich. Zum Beispiel ist die Tatsache, dass es 150 Plätze gibt, an zwei verschiedenen Orten gespeichert, von denen beide referenziert werden. –

+0

Sind Sie sicher, dass es "add1Passanger" anstelle von "add1Passenger" sein sollte? Denken Sie daran, dass die Rechtschreibung zählt. – Makoto

Antwort

0

Bitte sehen der folgende Code Lesen Sie Kommentare für Erklärungen. Der Zweck des Codes ist nicht nur die Frage zu beantworten, sondern auch die Idee von MCVE zu demonstrieren.
Durch das Posten eines MCVE werden Sie wahrscheinlich schneller und besser Hilfe bekommen, und viel wichtiger: In vielen Fällen hilft es Ihnen, das Problem selbst zu finden.

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

Obwohl der Code viel prägnant sein sollte und sauber für dieses Szenario .. es ist nur erste Vermutung 0-passenger in Flight

Konstruktion zuordnen
+0

Das ist falsch. Das Problem ist, dass maxCarryOns auf 0 gesetzt ist. – c0der

Verwandte Themen