如何构造一个需要从构造函数传递值的方法?

时间:2016-11-30 07:48:45

标签: java multiple-inheritance

我正在编写一个程序,该程序基于记录房屋内设备正在使用的能耗量。到目前为止,我已经创建了各种仪表类,例如WaterMeter,GasMeter等,需要使用值的空方法,我还为具有方法的设备创建了类,这些方法将用于记录每个设备中的能量消耗。我现在正在处理的是应用存储在构造函数中的能量值,将这些值放入timePasses()方法中,然后将这些值返回到特定仪表的方法,以便可以注册它们。这就是我到目前为止所做的:

设备类示例:

public class ElectricShower extends Shower
{

    public int isOn = -1;
    public int isOff = 0;
    public int incrementTime;
    public int x = -1;

    private static ElectricMeter instance = new ElectricMeter();
    public static ElectricMeter getInstance() { return instance; }

     @Override
     public int currentState()
    {

        if (x == 0)
        return isOff;
        else
        {
            return isOn;
        }
        //returns isOn;
}

      @Override
        public void useTime(int defaultTime)
        {

            defaultTime = 15;
            incrementTime = 1;

        }

        public void shower()
        {

            //call timePasses() method

        }

        @Override
         public int timePasses()
         {

             if(x == isOff)
                 return 0;
             else
             {
             ElectricMeter.getInstance().incrementConsumed(electricityUse);             
             }

         }

    ElectricShower(int electricityUse, int gasUse, int waterUse, int timeOn)  
{
    super(electricityUse, gasUse, waterUse, timeOn);


    this.electricityUse = 12 * incrementTime;
    this.gasUse = 0 * incrementTime;
    this.waterUse = 4 * incrementTime;
    this.timeOn = 15 * incrementTime;

} 

}

Meter示例:

public class ElectricMeter 
{
public int incrementConsumed(int value)  
    {

    }

    public int incrementGenerated()  
    {

    }
    public boolean canGenerate()  
    {

    }
    public String getConsumed()  
    {

    }
    public String getGenerated()  
    {

    }

}

接下来我需要做的是:

  1. 获取electricityUsewaterUse的值并将其存储在timePasses()其他帖子中
  2. timePasses() else语句中,将electrcityUse方法的值incrementGenerated()置于ElectricMeter类中,并对waterUse变量执行相同操作
  3. 更新

    课程已更新,仍在努力寻找如何使其发挥作用。

2 个答案:

答案 0 :(得分:0)

首先,我假设您有一个Appliance类,所有设备都来自此类。您应该在Appliance类中创建存储电力,燃气和水的使用的变量:

public class Appliance
{
    public int electricityUse, gasUse, waterUse, timeOn;
    // ...
}

请注意,总是使用getter和setter而不是public字段。我只是懒惰:D

更改构造函数,以便设置上面的变量:

ElectricShower(int electricityUse, int gasUse, int waterUse, int timeOn)  
{
    super(electricityUse, gasUse, waterUse, timeOn);
    // I don't know why you multiply the constant by incrementTime here. Seems weird. I think you can remove them.
    this.electricityUse = 12 * incrementTime;
    this.gasUse = 0 * incrementTime;
    this.waterUse = 4 * incrementTime;
    this.timeOn = 15 * incrementTime;

} 

编写else子句的一种方法是使用“Singleton Pattern”。

在每个米级中,写下这样的东西:

private ElectricMeter() {}
private static ElectricMeter instance = new ElectricMeter();
public static ElectricMeter getInstance() { return instance; }

incrementConsumed方法中,您应该接受一个指示增量量的参数:

public int incrementConsumed(int value)  
{
    // logic here...
}

else子句中,您可以这样做:

ElectricMeter.getInstance().incrementConsumed(electricityUse);
GasMeter.getInstance().incrementConsumed(gasUse);
WaterMeter.getInstance().incrementConsumed(waterUse);

答案 1 :(得分:0)

您应该检查一下您的设计。

如果您需要访问类参数,您可以将其定义为 public ,或者更好地创建一个返回值的所谓 getter 方法。

示例:

public class MyData {
    public int counter;
}

....
// Some other class
MyData data = new MyData();

data.counter = 5;

System.out.println(data.counter);

或者

public class MyData {
    private int counter;
    public void setCounter(int counter) {
        this.counter = counter;
    }
    public int getCounter() {
        return this.counter;
    }
}

....
// Some other class
MyData data = new MyData();

data.setCounter(5);

System.out.println(data.getCounter());

在你的代码中我看到:

public int incrementConsumed()  
{
    //Store value of electricityUse.
}

但是这个方法应该只返回一个整数而没有参数来获取要存储的输入。

应该是:

public void incrementConsumed(int amount) {
    this.amount += amount;
}

我很担心这句话:

gasUse = 0 * incrementTime;

如果你将某些东西乘以 0 ,那么它总是 0 ......