2016-12-01 3 views
3

私はtimePasses()メソッドを持つアプライアンスクラスを作成しました。このメソッドは、別のクラスの内部にある別のメソッド内に格納する必要のある値をリダイレクトします。私はこの上までだのはここです:メソッドを呼び出すときに正しい値を渡す方法は?

アプライアンス

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() { 
    } 
} 

Mainメソッド

public class MainCoursework { 

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

したがってtimePasses()の値はElectricMeterインスタンスにリダイレクトされましたが、今度はその値をメータークラスのincreentConsumed()メソッドに戻す必要があります。これを行う方法については固執しています。 electricityConsumedの値は20であるため、出力は20である必要があります。しかし代わりに、a.incrementConsumed(//pass parameter here)にパラメータを渡さなければならず、electrictyUseから20の代わりに何が渡されるかが画面に表示されます。どのようにこれを行うに役立つ、感謝、ありがとうございます。

答えて

3

実は、incrementConsumed方法が実際に実装されています

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

は行うべきで、incrementXXXべきではない、本当に何も出力と呼ばれる方法?それはインクリメント変数/フィールド必要があります。今

public int getElectricityUsed() { 
    return electricityUsed; 
} 

のは、あなたのmain方法を修正してみましょう:

private int electricityUsed = 0; 
public void incrementConsumed(int value) 
{ 
    electricityUsed += value;  
} 

あなたはelectricityUsedを返す別のメソッドを宣言する必要があります。

あなたの主な方法では、電力を消費するものを作成していませんでした。電気計器はどのようにしてincrementConsumedできますか?だから、mainメソッドからすべてを削除し、炊飯器を作成します。

cooker.timePasses(); 

、使用電力印刷:

// your constructor looks weird. So I passed in some random arguments.. 
ElectricCooker cooker = new ElectricCooker(20, 0, 0, 60); 

は現在、いくつかの時間が経過していることをシミュレートするためにtimePassesを呼んで

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

にインスタンス変数を作成し、その値をincrementConsumedに更新する必要があります。印刷する場合は、この変数のaccessorを使用します。あなたが述べたよう

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; 
    } 
} 
1

ElectricMeter、一部の操作では必要な操作が実行されません。

ElectricMeter.getInstance().incrementConsumed(electricityUse); 

は何かをインクリメントしなければならないが、それは唯一の出力に書き込みます。

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

あなたは、むしろそれを書く必要があります。

public void incrementConsumed(int value){ 
      consumed+=value; 
    } 

をし、実際の格納にElectricMeterクラスでprivate int consumedフィールドを追加します消費される。空の実装がある

そして、あなたのgetConsumed()

public String getConsumed(){ 

} 

は単にconsumedフィールドを返す必要がありますし、int値ではなくStringを返す必要があります。このようにして

public int getConsumed() { 
    return consumed; 
} 

、あなたが行うことができます:

public static void main(String[] args){ 
    ElectricMeter.getInstance().incrementConsumed(20);  
    int consumed = ElectricMeter.getInstance().getConsumed();  
} 
関連する問題