Java 调用方法时如何传递正确的值?

Java 调用方法时如何传递正确的值?,java,methods,Java,Methods,我正在做一个赋值,在这个赋值中我创建了一个Appliance类,其中包含一个timepasss()方法。此方法重新定向需要存储在另一个类中的另一个方法中的某些值。以下是我在这方面的工作: 设备 public class ElectricCooker extends Cooker { public int isOn = -1; public int isOff = 0; public int incrementTime; public int varPass =

我正在做一个赋值,在这个赋值中我创建了一个Appliance类,其中包含一个
timepasss()
方法。此方法重新定向需要存储在另一个类中的另一个方法中的某些值。以下是我在这方面的工作:

设备

public class ElectricCooker extends Cooker {

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

    @Override
    public int currentState() {
        if (varPass == 0) {
            return isOff;
        } else {
            return isOn;
        }
    }

    @Override
    public void useTime(int defaultTime) {
        defaultTime = 15;
        incrementTime = 4;
    }

    @Override
    public void timePasses() {
        if (varPass == isOff) {
            varPass = 0;
        } else {
            ElectricMeter.getInstance().incrementConsumed(electricityUse);
            GasMeter.getInstance().incrementConsumed(gasUse);
            WaterMeter.getInstance().incrementConsumed(waterUse);
        }
    }

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

        this.electricityUse = 5 * incrementTime;
        this.gasUse = 0 * incrementTime;
        this.waterUse = 0 * incrementTime;
        this.timeOn = 15 * incrementTime;
    }
}
仪表

public class ElectricMeter {

    ElectricMeter() {
    }
    private static ElectricMeter instance = new ElectricMeter();

    public static ElectricMeter getInstance() {
        return instance;
    }

    public void incrementConsumed(int value) {
        System.out.println(value);
    }

    public int incrementGenerated() {
    }

    public boolean canGenerate() {
    }

    public String getConsumed() {
    }

    public String getGenerated() {
    }
}
主要方法

public class MainCoursework {

    public static void main(String[] args) {
        ElectricMeter a = new ElectricMeter();
        a.incrementConsumed(//what goes here?);     
    }
}

因此,来自
timePasses()
的值已经被重定向到
ElectricMeter
实例中,但现在我需要将该值返回到meter类中的
incrementconsumered()
方法中,我一直在研究如何执行此操作。由于
electricityConsumed
的值为20,因此输出应为
20
。但是,我必须将一个参数传递到a.incrementConsumed(//pass parameter here)中,然后将传递的内容打印到屏幕上,而不是
electrictyUse中的
20
。非常感谢您提供的帮助。

您需要在
电能表中创建一个实例变量,并在
incrementConsumed
上更新该值。当您想要打印时,请使用此变量的
访问器

public class Electric {
    public static void main(String[] args) {
        ElectricCooker cooker = new ElectricCooker(1,2,3,4);
        //opertion on cooker
        //ignoring best way for singleton creation
        int electricityUse = ElectricMeter.getInstance().getElectricityUse();
        System.out.println(electricityUse);
    }
}

class ElectricCooker // extends Cooker
{
    public int isOn = -1;
    public int isOff = 0;
    public int incrementTime;
    public int varPass = -1;
    public int electricityUse = -1;

    public int currentState() {
        if (varPass == 0)
            return isOff;
        else {
            return isOn;
        }
    }

    public void useTime(int defaultTime) {
        defaultTime = 15;
        incrementTime = 4;
    }

    public void timePasses() {
        if (varPass == isOff)
            varPass = 0;
        else {
            ElectricMeter.getInstance().incrementConsumed(electricityUse);
        }
    }

    ElectricCooker(int electricityUse, int gasUse, int waterUse, int timeOn) {
        this.electricityUse = 5 * incrementTime;
    }

}

class ElectricMeter {

    public int electricityUse = -1;

    private static ElectricMeter instance = new ElectricMeter();

    public static ElectricMeter getInstance() {
        return instance;
    }

    public void incrementConsumed(int value) {
        this.electricityUse = value;
    }

    public int getElectricityUse() {
        return electricityUse;
    }
}

实际上,
incrementConsumed
方法确实如您所述实现:

public void incrementConsumed(int value)  
{
    System.out.println(value);     
}
名为
incrementXXX
的方法实际上不应该输出任何东西,是吗?它应该增加一个变量/字段:

private int electricityUsed = 0;
public void incrementConsumed(int value)  
{
    electricityUsed += value;    
}
您应该声明另一个返回
electricityUsed
的方法:

public int getElectricityUsed() {
    return electricityUsed;
}
现在,让我们修复您的
main
方法

在你的主要方法中,你甚至没有创造任何耗电的东西!电表如何增加消耗量?因此,从主方法中删除所有内容,并创建一个炊具:

// your constructor looks weird. So I passed in some random arguments..
ElectricCooker cooker = new ElectricCooker(20, 0, 0, 60);
现在调用
timePasses
模拟某个时间过去:

cooker.timePasses();
并打印所用电量:

System.out.println(ElectricMeter.getInstance().getElectricityUsed());

电表中
,有些操作不执行它们应该执行的操作

  ElectricMeter.getInstance().incrementConsumed(electricityUse);  
应该增加某些内容,但它只在输出中写入:

public void incrementConsumed(int value){
         System.out.println(value);     
    }
你应该写它,而不是:

public void incrementConsumed(int value){
           consumed+=value; 
    }
并在
电表
类中添加一个
private int consumered
字段来存储实际消耗的电量

以及具有空实现的
getConsumed()

public String getConsumed(){

}
只需返回
consumered
字段,就可以返回
int
值,而不是
字符串

public int getConsumed()  {
  return consumed;
}
通过这种方式,您可以执行以下操作:

public static void main(String[] args){
  ElectricMeter.getInstance().incrementConsumed(20);     
  int consumed = ElectricMeter.getInstance().getConsumed();     
}