我正在编写一个程序,该程序基于记录房屋内设备正在使用的能耗量。到目前为止,我已经创建了各种仪表类,例如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()
{
}
}
接下来我需要做的是:
electricityUse
和waterUse
的值并将其存储在timePasses()
其他帖子中timePasses()
else语句中,将electrcityUse
方法的值incrementGenerated()
置于ElectricMeter
类中,并对waterUse
变量执行相同操作更新
课程已更新,仍在努力寻找如何使其发挥作用。
答案 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 ......