2016-12-01 2 views
3

Я выполняю назначение, в котором я создал класс Appliance, в котором есть метод timePasses(). Этот метод перенаправляет некоторые значения, которые необходимо сохранить в другом методе, который находится внутри другого класса. Вот где я до этого на:Как передать правильное значение при вызове метода?

Appliance

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

Meter

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, но теперь мне нужно вернуть это значение методу increentConsumed() в классе счетчика, и я зациклился на том, как это сделать. Поскольку значение electricityConsumed равно 20, выход должен быть 20. Но вместо этого я должен передать параметр в a.incrementConsumed(//pass parameter here), и то, что когда-либо было передано, печатается на экране вместо 20 от electrictyUse. Любая помощь в том, как это сделать, ценится, спасибо.

ответ

3

На самом деле, метод 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.

В вашем основном методе вы даже не создали ничего, что потребляет электричество! Как может электрический счетчик incrementConsumed? Так удалить все от основного метода и создание плиты:

// 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()); 
2

вам необходимо создать переменную экземпляра в ElectricMeter и обновить это значение, скажем, 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; 
    } 

и добавить private int consumed поле в ElectricMeter классе хранить фактическое потребляются.

И ваш 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();  
} 
Смежные вопросы