Сеттер и геттер не работают - PullRequest
0 голосов
/ 15 октября 2010

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

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;
    }
}

Ответы [ 4 ]

3 голосов
/ 15 октября 2010

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

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

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

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

У вас также есть второй (поддельный) метод setAirlineName, как показано ниже:

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

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

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

2 голосов
/ 15 октября 2010

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

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

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

1 голос
/ 15 октября 2010

Вы читаете переменную AirlineName, но передаете в установщик другую неинициализированную переменную name:

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

То же самое относится и к другим 3 переменным FlightNumber, Origin и Destination.

1 голос
/ 15 октября 2010

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

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

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

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

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

public String getAirlineName()
{
    return AirlineName;
}

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

...