2010-10-15 2 views
0

Это мое задание о сеттере и геттере, и по какой-то причине оно не работает. Может ли кто-нибудь проверить, в чем проблема для меня? Спасибо.Сеттер и геттер не работают

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

Пожалуйста, определите «не работает» более подробно :) Он имеет бесконечные различные значения. – BalusC

ответ

2

Похоже, вы читаете вызовы newLine() Scanner в новые переменные и затем передаете переменные, которые не были инициализированы. Например, я думаю, что вы хотите что-то вроде этого:

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

Обратите внимание, что вторая строка читает nextLine() в переменную, что вы переходящую в инкубатор.

+1

Обратите внимание, что это так для всех отдельных разделов. – MikeTheReader

1

У вас есть этот метод:

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

Какие конфликтует с фактическим сеттер, потому что они являются тем же именем, но из разных типов возврата, а также ошибки, следовательно, компилятор может плеваться, который я предполагаю, является что вы имеете в виду под «не работает»:

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

String setAirlineName(void), вероятно, имел в виду, чтобы быть String getAirlineName(void), который вы уже реализованы так же, как БАС IC геттер предназначен для:

public String getAirlineName() 
{ 
    return AirlineName; 
} 

Как Dante617 has answered, другая ошибка состоит в том, что вы используете разные локальные переменные для чтения ввода и игнорируя те, которые вы объявлены (и не инициализировать) до вашего Scanner объекта.

+0

Это мой второй ответ [домашняя работа], однако я считаю, что совершенно нормально быть более прямым, но компенсировать, предлагая объяснение того, что происходит, поскольку конфликтующие сигнатуры методов могут быть сложными для отслеживания. – BoltClock

3

Вот проблема:

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

Вы читаете имя и положить его в AirlineName, то вызов сеттера с различной переменной в качестве аргумента.

На самом деле, вы должны получить ошибку компиляции, сообщающую, что name не инициализирован.

У вас также есть второй (фиктивный) метод setAirlineName следующим образом:

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

... который не является собственным сеттер. Но похоже, что ваш метод main не вызывает его, так что это не причина ваших проблем. (Вы вызываете перегрузку setAttributeName(String) ...)

И наконец, пожалуйста, ПОЖАЛУЙСТА, научитесь следовать стандартным соглашениям стиля Java для идентификаторов. Имя переменной или атрибута должно быть не начать с прописной буквы. Измените атрибуты и переменные AirlineName на airlineName и так далее.

1

Вы читаете переменную AirlineName, но проходя различные неинициализированный переменную name в инкубаторе:

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

То же самое и в случае с другими переменными 3 FlightNumber, Origin и Destination.

Смежные вопросы