Ошибка несовместимых типов при возврате дает мне ошибку?

Итак, я некоторое время пытался работать над этим кодом, но две мои функции возврата отказываются работать должным образом. Я знаю, что возвращаю не тот тип, но совершенно не представляю, что вернуть вместо него, вот код: Ошибки в строке 53 и 58. Какой код мне нужен, чтобы правильно вернуть машину и грузовик ?

public class lab21composition
{
public static void main(String args[])
{
    CarFactory factory = new CarFactory ("Ford");
    Garage myGarage = new Garage();

    Car c = factory.produceCar("Fusion");
    Truck t = factory.produceTruck("F150");

    System.out.println(myGarage);

    myGarage.addVehicle(c);
    System.out.println(myGarage);

    myGarage.addVehicle(t);
    System.out.println(myGarage);

    Vehicle v = myGarage.removeVehicle();
    if (null !=v)
    {
        System.out.println(v.toString() + " was removed from garage.");
        System.out.println(myGarage);
    } 
        else
        {
            System.out.println("There was no vehicle in the garage to remove.");
        }

        myGarage.addVehicle(t);
        System.out.println(myGarage);

        CarFactory factory2 = new CarFactory ("Honda");
        Garage myGarage2 = new Garage();
        Car d = factory.produceCar("Odyssy");
        myGarage.addVehicle(d);
        System.out.println(myGarage2);

}
}

class CarFactory
{
private String name;

public CarFactory(String n)
{
    name = n; //ERROR, incompatible types/ Required:Truck/ Found: java.lang.String
}

public Car produceCar(String model)
{
    return name;  //ERROR, incompatible Types/ Required:Truck/Found: java.lang.String
}

public Truck produceTruck(String model)
{
    return name;
}
}

class Vehicle
{
public static String make, model;

public Vehicle()
{
    make = "Undefined";
    model = "Undefined";
}

public Vehicle(String _make, String _model)
{
    make = _make;
    model = _model;
}

public String toString()
{
    return make+" "+model;
}

}

class Car extends Vehicle
{
public Car()
{
    super (make,model);
}   
}

class Truck extends Vehicle
{
public Truck()
{
super (make,model);
}
}

class Garage
{
// Define a private variable that holds a Vehicle object. This will represent the vehicle being stored in the Garage. If the garage is empty, then this variable 
// should be null
private Vehicle Veh;

public void addVehicle(Vehicle v)
{
    if(v==Veh) /* replace FALSE with code to check if v is the same as vehicle */
    {
        //HINT: use a function inherited from the Object class!
        System.out.println(v.toString() + " is already parked in this garage");
    }
        else if (hasVehicle())
        {
            System.out.println("This garage is full!");
        }
        else
        {
            Veh = v;
            //store the vehicle that was passed to this function
            //in this class vehicle attribute
        }
}

public Vehicle removeVehicle()
{
    //store this class vehicle attribute in a temporary variable
    // set this class vehicle attribute to null
    // return the vehicle stored in the temporary variable
    return null;
}

public boolean hasVehicle()
{
    //change this return statement so that it
    //returns an appropriate boolean value
    return false;
}

public String toString()
{
    if (hasVehicle())
    {
        //replace ??? with the toString() method of the vehicle
        // that is in this garage
        return "This garage has a"+toString()+"in it!";
    }
    else
    {
        return "This garage is empty.";
    }
}

}


person machinamonster    schedule 16.02.2015    source источник
comment
Не могли бы вы опубликовать ошибки, которые вы получаете?   -  person Ascalonian    schedule 16.02.2015
comment
Конечно, строка: требуется 53 несовместимых типа: найден автомобиль: java.lang.String строка: требуется 58 несовместимых типов: найден грузовик: java.lang.String   -  person machinamonster    schedule 16.02.2015
comment
Укажите сведения об ошибке и местонахождение ошибки.   -  person Janny    schedule 16.02.2015
comment
Отредактируйте вопрос с правильным вводом.   -  person Janny    schedule 16.02.2015
comment
@machinamonster - Пожалуйста, предоставьте трассировку стека. А также прокомментируйте в коде, какие строки 53 и 58 (или покажите эти строки, когда вы предоставляете трассировку стека)   -  person Ascalonian    schedule 16.02.2015
comment
Я показал строки с ошибкой, но не могу сказать, что знаю, что вы имеете в виду под трассировкой стека   -  person machinamonster    schedule 16.02.2015


Ответы (2)


Ваши проблемы здесь:

class CarFactory
{
private String name;
//snip    
public Car produceCar(String model)
{
    return name; 
}

public Truck produceTruck(String model)
{
    return name;
}
}

Вы объявили, что CarFactory.produceCar возвращает Car, но вы говорите return name;, а имя имеет тип String.

person Sbodd    schedule 16.02.2015
comment
Я считаю, что ОП знает, где проблемы, но не знает, как их решить. Ответом будет вызов соответствующих конструкторов Car и Truck вместо возврата name. - person JonK; 16.02.2015
comment
Что мне нужно для возврата автомобиля или грузовика? Я пытался изменить тип в методах, но мои первые строки — это все автомобили или грузовики. - person machinamonster; 16.02.2015
comment
В public Car produceCar вам нужно найти Car с этой моделью и вернуть объект Car. А в produceTruck вы выполняете поиск по модели, а затем возвращаете объект Truck. - person Ascalonian; 16.02.2015

Вы создаете CarFactory для определенного бренда, например. «Форд». Вы хотите построить определенные модели автомобилей или грузовиков. Для этого вы вызываете конструктор Car и Truck соответственно.

class CarFactory {
    private String name; // brand
    public CarFactory(String n){
        name = n;
    }
    public Car produceCar(String model){
        return new Car( name, model );
    }
    public Truck produceTruck(String model){
        return new Truck( name, model );
    }
}

Автомобиль и Грузовик должны иметь подходящие конструкторы:

class Car extends Vehicle{
    public Car(String make, String model){
        super (make,model);
    }   
}

То же самое для грузовика.

person laune    schedule 16.02.2015