使用来自不同类的变量在Java中构造

时间:2016-02-04 10:23:55

标签: java

所以我有4类汽车发动机,变速箱,底盘和汽车本身的编码如下:

public class Chassis {
    public double m_Cprice;

    public Chassis(double m_Cprice) {
        this.m_Cprice = m_Cprice;
    }

    public double getChassisPrice() {
        return m_Cprice;
    }

    public void setChassisPrice(double m_Cprice){
        this.m_Cprice = m_Cprice;
    }
}

对于机箱:

public class Transmission {
    public double m_Tprice;

    public Transmission(double m_Tprice){
        this.m_Tprice = m_Tprice;
    }

    public double getTransmissionPrice() {
        return m_Tprice;
    }

    public void setTransmissionPrice(double m_Tprice){
        this.m_Tprice = m_Tprice;
    }
}

对于引擎:

public class Engine {
    public double m_Eprice;

    public Engine(double m_Eprice){
        this.m_Eprice = m_Eprice;
    }

    public double getEnginePrice() {
        return m_Eprice;
    }

    public void setEnginePrice(double m_Eprice){
        this.m_Eprice = m_Eprice;
    }
}

最后是为了汽车:

public final  class Car {
    public double m_baseprice;
    public Chassis m_Cprice;
    public Engine m_Eprice;   
    public Transmission m_Tprice;

    public double getBaseprice() {
        return m_baseprice;
    }

    public void setBasePrice(double m_baseprice){
        this.m_baseprice = m_baseprice;
    }

    public Car(double Baseprice,double Chassis, double Engine, double Transmission) {
        setBasePrice(Baseprice);
        m_Cprice = new Chassis(Chassis);
        m_Eprice = new Engine(Engine);
        m_Tprice = new Transmission(Transmission); 
    }

    public Chassis getM_Cprice() {
        return m_Cprice;
    }


    public void setM_Cprice(Chassis m_Cprice) {
        this.m_Cprice = m_Cprice;
    }

    public Engine getM_Eprice() {
        return m_Eprice;
    }

    public void setM_Eprice(Engine m_Eprice) {
        this.m_Eprice = m_Eprice;
    }


    public Transmission getM_Tprice() {
        return m_Tprice;
    }


    public void setM_Tprice(Transmission m_Tprice) {
        this.m_Tprice = m_Tprice;
    }

当我尝试调用此应用程序的构造函数时,一切正常,我的代码中没有错误,但是当我要求输出任何东西都没有输出时,我无法使用构造函数中的边界正确构建我的汽车是新的汽车(3000,500,1000,2000)使应用程序无法正常工作,虽然没有错误指向我正确的方向。

2 个答案:

答案 0 :(得分:0)

请留下那可怕的" m _"成员变量的前缀。读起来太可怕了。

您需要了解更多Java。第一步:覆盖所有类中的toString()以输出价格。您所看到的是默认输出:每个类的参考值。

Double不是钱的好主意。既然你在这里处理大件物品,我建议不要花掉美分,坚持整数和全部美元。

public class Engine {

    private int price;

    public Engine(int price) {
        this.setPrice(price);
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price){
        if (price <= 0) throw new IllegalArgumentException("price must be positive");
        this.price = price;
    }

    public String toString() {
        return String.format("price: %d", this.price);
    }
}

我知道你是初学者,但这个设计迫切需要一个界面和一个复合模式:

public interface Sellable {
    int getPrice();
    void setPrice(int price);
}

现在,您的Car可以被视为Sellable个实例的集合。它的价格将是所有Sellables的总和。

答案 1 :(得分:-1)

代码的整体结构不是很好。我建议如下:

public class CarPart {

    private double price;

    public Part(final double price) {
        this.price = price;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(final double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Price = " + price;
    }
}

public class Engine extends CarPart {

    public Engine(final double price) {
        super(price);
    }
}

public class Chassis extends CarPart {

    public Chassis(final double price) {
        super(price);
    }
}

public class Transmission extends CarPart {

    public Transmission(final double price) {
        super(price);
    }
}

public class Car {

    private double totalPrice;
    private Chassis chassis;
    private Engine engine;
    private PTransmission transmission;

    public Car(final double totalPrice, final Chassis chassis, final Engine engine, final Transmission transmission) {
        this.totalPrice = totalPrice;
        this.chassis = chassis;
        this.engine = engine;
        this.transmission = transmission;
    }

    public double getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice(final double totalPrice) {
        this.totalPrice = totalPrice;
    }

    public Chassis getChassis() {
        return chassis;
    }

    public void setChassis(final Chassis chassis) {
        this.chassis = chassis;
    }

    public Engine getEngine() {
        return engine;
    }

    public void setEngine(final Engine engine) {
        this.engine = engine;
    }

    public Transmission getTransmission() {
        return transmission;
    }

    public void setTransmission(final Transmission transmission) {
        this.transmission = transmission;
    }
}

现在您将能够使用该应用程序:

public class Main {

    public static void main(String[] args) {
        final Chassis chassis = new Chassis(2000);
        final Engine engine = new Engine(3000);
        final Transmission transmission = new Transmission(4000);

        final Car car = new Car(1000, chassis, engine, transmission);

        System.out.println(chassis.toString());
    }
}