2010-10-15 6 views
0

Ceci est mon devoir sur setter et getter et cela ne fonctionne pas pour une raison quelconque. Quelqu'un pourrait-il vérifier quel est le problème pour moi? Merci.Setter et getter ne fonctionnent pas

public class FlightTest 
{ 
    public static void main (String [] args) 
    { 

     String name; 
     String number; 
     String Orig; 
     String Desti; 

     Scanner scan = new Scanner (System.in); 

     Flight data = new Flight(); 

     System.out.print ("Airline Name: "); 
     String AirlineName = scan.nextLine(); 
     data.setAirlineName (name); 

     System.out.print ("Flight Number: "); 
     String FlightNumber = scan.nextLine(); 
     data.setFlightNumber (number); 

     System.out.print ("Origin: "); 
     String Origin = scan.nextLine(); 
     data.setOrigin (Orig); 

     System.out.print ("Destination: "); 
     String Destination = scan.nextLine(); 
     data.setDestination (Desti); 

     System.out.println (data); 
    } 
} 





public class Flight 

{ 

    private String AirlineName; 

    private String FlightNumber; 

    private String Origin; 

    private String Destination; 

    public String setAirlineName() 
    { 
     String Name = AirlineName; 
     return Name; 
    } 

    public Flight() 
    { 
     AirlineName = ""; 
     FlightNumber = ""; 
     Origin = ""; 
     Destination = ""; 
    } 

    public String getAirlineName() 
    { 
     return AirlineName; 
    } 

    public void setAirlineName (String name) 
    { 
     AirlineName = name; 
    } 

    public String getFlightNumber() 
    { 
     return FlightNumber; 
    } 

    public void setFlightNumber (String number) 
    { 
     FlightNumber = number; 
    } 

    public String getOrigin() 
    { 
     return Origin; 
    } 

    public void setOrigin (String Orig) 
    { 
     Origin = Orig; 
    } 

    public String getDestination() 
    { 
     return Destination; 
    } 

    public void setDestination (String Desti) 
    { 
     Destination = Desti; 
    } 

    public String toString() 
    { 
     String result = AirlineName + " flight number " + FlightNumber + " leaves from " + Origin + " to " + Destination + "."; 
     return result; 
    } 
} 
+3

Veuillez définir "ne fonctionne pas" plus en détail :) Il a des significations différentes infinies. – BalusC

Répondre

2

Il semble que vous lisez les appels ScanLine newLine() dans de nouvelles variables, puis transmettez les variables qui n'ont pas été initialisées. Par exemple, je pense que vous voulez quelque chose comme ceci:

System.out.print ("Airline Name: "); 
name = scan.nextLine(); 
data.setAirlineName (name); 

Notez que la deuxième ligne lit le nextLine() dans la variable que vous passez dans le poseur.

+1

Notez que c'est ainsi pour toutes les sections individuelles. – MikeTheReader

1

Vous avez cette méthode:

public String setAirlineName() 
{ 
    String Name = AirlineName; 
    return Name; 
} 

qui est en conflit avec votre setter réelle parce qu'ils sont le même nom mais de différents types de retour, et par conséquent le compilateur peut être des erreurs Cracher, que je suppose est ce que vous entendez par « ne fonctionne pas »:

public void setAirlineName (String name) 
{ 
    AirlineName = name; 
} 

String setAirlineName(void) était probablement destiné à être String getAirlineName(void), que vous avez déjà mis en œuvre comme un bas ic getter est destiné à être:

public String getAirlineName() 
{ 
    return AirlineName; 
} 

Comme Dante617 has answered, une autre erreur est que vous utilisez différentes variables locales pour lire l'entrée et en ignorant ceux que vous avez déclarées (et n'a pas été initialisé) avant votre objet Scanner.

+0

Ceci est ma deuxième réponse [devoirs], mais je pense que c'est très bien d'être plus direct mais de compenser en offrant une explication de ce qui se passe, car les signatures de méthodes conflictuelles peuvent être difficiles à repérer. – BoltClock

3

Voici le problème:

String AirlineName = scan.nextLine(); 
    data.setAirlineName (name); 

Vous êtes en train de lire un nom et de le mettre en AirlineName, appelant alors le compositeur avec une variable différente comme argument. En fait, vous devriez recevoir une erreur de compilation vous indiquant que name n'est pas initialisé.

Vous avez également une seconde (bogus) méthode setAirlineName comme suit:

public String setAirlineName() 
{ 
    String Name = AirlineName; 
    return Name; 
} 

... qui n'est pas un poseur approprié. Mais il semble que votre méthode main ne l'appelle pas, donc ce n'est pas la cause de vos problèmes. (Vous appelez la surcharge setAttributeName(String) ...)

Enfin, s'il vous plaît, s'il vous plaît, s'il vous plaît, apprenez à suivre les conventions de style Java standard pour les identitiers. Une variable ou un nom d'attribut doit et non commencer par une lettre majuscule. Changez vos attributs et variables AirlineName en airlineName, et ainsi de suite.

1

Vous lisez la variable AirlineName mais qui passe un autre uninitialized variables name au poseur:

String AirlineName = scan.nextLine(); 
data.setAirlineName (name); 
        ^^^^ 

même est le cas avec d'autres 3 variables FlightNumber, Origin et Destination.

Questions connexes