2016-04-09 12 views
0

Bis jetzt habe ich es geschafft, eine Ausgabe mit einer Klasse namens ExpenseItem zu modellieren. Diese Klasse modelliert eine Ausgabe unter Verwendung der Attribute Name, Menge und Häufigkeit. Die Attribute sollten als private Mitglieder dieser Klasse modelliert werden. Daher habe ich einen Konstruktor verwendet, der diese drei Argumente annimmt.Probleme beim Aufruf der Methode für Objekt - JAVA

Ich habe Probleme mit den folgenden Methoden in die Klasse der Umsetzung:

annualTotal; was den geschätzten Gesamtaufwand für das ExpenseItem-Objekt zurückgeben soll. es muss die Menge * Häufigkeit sein.

Ich habe Schwierigkeiten bei der Implementierung der Methode, damit ich es bekommen kann, um alle Beträge und Häufigkeiten von ExpenseItem zu erfassen und die Summen zu summieren. Bisher habe ich nur 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); 

Wie implementiere ich eine Methode, die das Doppel von e1 nimmt, e2, e3, e (n) ... und multipliziert die Kosten für jeden? zum Beispiel e1 annualTotal = 2,25 * 6.

Aktuelle Code unten:

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

Sie werden es nicht von One ExpenseItem bekommen - das ist kein sehr interessanter Durchschnitt. Sie werden wahrscheinlich eine Liste von Ausgabenelementen erstellen und diese berechnen. – duffymo

+0

Ja, Sie müssen eine Art Inhaberklasse erstellen - zum Beispiel "ExpenseAccount" - die alle Ihre Ausgabenpositionen enthält. Dann machen Sie eine Methode, um die ExpenseItems auf dem ExpenseAccount zusammenzufassen. – markspace

Antwort

0

Die Klasse ExpenseItem hat die Elemente, die Sie für jede Berechnung im Beispiel wollen so statt definieren diese Methode

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

tun, um diese

public double annualTotal(){ 

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

} 

hinzu, dass ich eine st definieren würde atic acumulator Mitglied (da das Tal ist für die Klasse und nicht die Objekte)

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

und Sie seinen Wert von

ExpenseItem.totalAcumulator 
+0

Ahh, macht Sinn. Nun, ich habe Probleme, es auszudrucken/es auf der Hauptfunktion anzuzeigen, weil es mir sagt, dass es keinen statischen Verweis auf eine nicht-statische Methode, wie annualTotal(), machen kann. Ich möchte diese Summe am Ende meines Codes anzeigen können. Irgendwelche Hilfe dabei? – Claude

0

Aufruf erhalten Sie zusätzlich + Operator anstelle der Multiplikation * Operator

verwenden

Ihre Funktion

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

}

sollte wie sein unter

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

}

diese Hilfe tut?

0

Für so etwas halte ich es für sinnvoll, unveränderliche Objekte zu verwenden.Da total ist ein abgeleitetes Feld:

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

Ausgang:

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

Total     80.00 

könnten Sie auch die ExpenseItem s in einer Liste haben:

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

, die die gleiche Ausgabe erzeugt.

Verwandte Themen