2016-04-09 3 views
0

До сих пор мне удалось моделировать расходы с помощью класса ExpenseItem. Этот класс моделирует расход, используя имя, количество и частоту атрибутов. Атрибуты должны быть смоделированы как частные члены этого класса. Таким образом, я использовал конструктор, который принимает эти три аргумента.Имея метод вызова вызова для объекта - JAVA

У меня возникли проблемы с внедрением следующих методов в классе:

annualTotal; который должен вернуть ожидаемый общий расход для объекта ExpenseItem. это должно быть количество * частоты.

У меня возникли трудности с внедрением метода, поэтому я могу получить его для захвата всех сумм и частот из ExpenseItem и суммирования итогов. До сих пор у меня есть только 3:

ExpenseItem e1 = new ExpenseItem ("Coffee", 2.25 , 6); 
ExpenseItem e2 = new ExpenseItem ("Food", 5.30 , 5); 
ExpenseItem e3 = new ExpenseItem ("Gas", 20.00 , 2); 

Как реализовать метод, который принимает двойников из e1, e2, e3, е (п) ... и умножает расходы для каждого из них? для примера, e1 annualTotal = 2,25 * 6.

Текущий код ниже:

public class ExpenseItem { 

private String name; 
public double amount; 
public double frequency; 
public double total; 
public ExpenseItem(String name, double amount, double frequency) { 
    this.name = name; 
    setAmount(amount); 
    setFrequency(frequency); 

} 
public double annualTotal(double amount, double frequency){ 
    double total= amount+frequency; 
    return total; 
    //System.out.printf("the total is:",total); 
} 

public void setName(String name){ 
    this.name = name; 
} 

public String getName(){ 
    return name; 
} 
public void setAmount(double amount){ 
    this.amount = amount>=0 ? amount:0 ; 
} 
public double getAmount(){ 
    return amount; 
} 
public void setFrequency(double frequency){ 
     this.frequency = frequency>=0 ? frequency:0 ; 
} 
public double getFrequency(){ 
     return frequency; 
} 

public static void main(String[] args) { 
ExpenseItem e1 = new ExpenseItem ("Coffee", 2.25 , 6); 
ExpenseItem e2 = new ExpenseItem ("Food", 5.30 , 5); 
ExpenseItem e3 = new ExpenseItem ("Gas", 20.00 , 2); 

System.out.println("Expense Item  Amount Frequency\n"); 
    outputInfo(e1);outputInfo(e2);outputInfo(e3); 
} 

private static void outputInfo(ExpenseItem e){ 
System.out.printf("%-15s\t%5.2f\t%5.0f\n", 
e.getName(),e.getAmount(), e.getFrequency()); 
    } 

    } 
+1

Вы не получите его от ONE ExpenseItem - это не очень интересный средний показатель. Скорее всего, вы создадите список ExpenseItems и усреднёте их. – duffymo

+0

Да, вам нужно сделать какой-то класс владельца - например, 'ExpenseAccount' - который содержит все ваши статьи расходов. Затем сделайте метод для суммирования ExpenseItems на ExpenseAccount. – markspace

ответ

0

ExpenseItem Класс имеет элементы, которые вы хотите для каждого расчета в случае так вместо определения этого метода

public double annualTotal(double amount, double frequency){ 
    double total= amount+frequency; 
    return total; 
    //System.out.printf("the total is:",total); 
} 

сделать это

public double annualTotal(){ 

    return (double)this.amount * this.frequency; 

} 

дополнение к тому, я бы определить ул член acumulator матических (так что Вейл для класса, а не объекты)

public class ExpenseItem { 

private String name; 
public double amount; 
public double frequency; 
public double total; 

public static double totalAcumulator = 0; //here is the trick 
public ExpenseItem(String name, double amount, double frequency) { 
    this.name = name; 
    setAmount(amount); 
    setFrequency(frequency); 
    totalAcumulator += annualTotal(); // and you call it every time you construct an object. 
} 

и вы можете получить его значение по телефону

ExpenseItem.totalAcumulator 
+0

Ahh, имеет смысл. Ну, теперь мне не удается распечатать его/показать его на главной функции, потому что он говорит мне, что не может статически ссылаться на нестатический метод, такой как annualTotal(). Я хочу показать эту сумму в конце моего кода. любая помощь с этим? – Claude

0

вы используете дополнение + оператора вместо умножения * оператора

ваша функция

public double annualTotal(double amount, double frequency){ 
double total= amount+frequency; 
return total; 
//System.out.printf("the total is:",total); 

}

должен быть как ниже

public double annualTotal(double amount, double frequency){ 
double total= amount * frequency; 
return total; 
//System.out.printf("the total is:",total); 

}

ли это помощь?

0

Для чего-то вроде этого, я чувствую, что имеет смысл использовать неизменяемые объекты.Поскольку total является производным полем:

public class ExpenseItem { 

    private final String name; 
    private final double amount; 
    private final double frequency; 
    private final double total; 

    public ExpenseItem(String name, double amount, double frequency) { 
     this.name = name; 
     this.amount = amount >= 0 ? amount : 0; 
     this.frequency = frequency >= 0 ? frequency : 0; 
     this.total = amount * frequency; 
    } 

    public String getName() { 
     return name; 
    } 

    public double getAmount() { 
     return amount; 
    } 

    public double getFrequency() { 
     return frequency; 
    } 

    public double getTotal() { 
     return total; 
    } 

    @Override 
    public String toString() { 
     return String.format("%-10s%-10.2f%-5.0f%1.2f", name, amount, frequency, total); 
    } 

    public static void main(String[] args) { 
     ExpenseItem e1 = new ExpenseItem ("Coffee", 2.25 , 6); 
     ExpenseItem e2 = new ExpenseItem ("Food", 5.30 , 5); 
     ExpenseItem e3 = new ExpenseItem ("Gas", 20.00 , 2); 

     System.out.println(e1); 
     System.out.println(e2); 
     System.out.println(e3); 

     double total = e1.getTotal() + e2.getTotal() + e3.getTotal();  
     System.out.println(String.format("\n%-25s%1.2f", "Total", total)); 
    } 
} 

Выход:

Coffee 2.25  6 13.50 
Food  5.30  5 26.50 
Gas  20.00  2 40.00 

Total     80.00 

Вы также мог бы иметь ExpenseItem с в списке:

public static void main(String[] args) { 
    List<ExpenseItem> list = Arrays.asList(
      new ExpenseItem ("Coffee", 2.25 , 6), 
      new ExpenseItem ("Food", 5.30 , 5), 
      new ExpenseItem ("Gas", 20.00 , 2) 
      ); 

    double total = 0; 
    for(ExpenseItem e : list) { 
     System.out.println(e); 
     total += e.getTotal(); 
    } 

    System.out.println(String.format("\n%-25s%1.2f", "Total", total)); 
} 

который производит тот же результат.

Смежные вопросы