2009-06-01 11 views
1

J'ai deux classes, une pour les articles et une autre pour le panier. Le chariot est constitué d'un tableau d'objets contenant article objets.Somme des champs d'objets dans objectarray, tous dans le constructeur?

Je dois résumer les prix des articles avec une boucle foreach dans le constructeur. Quand j'écris la méthode (c'est probablement faux) dans le constructeur, son type n'est pas accepté comme double. Comment puis-je résumer des champs d'objets dans un tableau d'objets et comment le faire dans un constructeur (< - cela ressemble à une mauvaise décision de conception, mais cela fait partie du travail de classe may).

Voici mes classes:

package org.teubler.sucks.aufgaben; 
public class Artikel { 
    public enum Warengruppe{ 
     A, B, C, S 
    } 
    String name; 
    double verkaufspreis; 
    Warengruppe Art; 

    Artikel(String name, double preis){ 
     this.name = name; 
     this.verkaufspreis = preis; 
     this.Art = Warengruppe.S; 
    } 
    public double getVerkaufspreis() { 
     return verkaufspreis; 
    } 
    public void setWarengruppe(Warengruppe Art) { 
     switch(Art){ 
      case A:Art = Warengruppe.A; 
      case B:Art = Warengruppe.B; 
      case C:Art = Warengruppe.C; 
      default: Art = Warengruppe.S; 
     } 
    } 
} 

deuxième classe

package org.teubler.sucks.aufgaben; 
import java.util.Random; 
public class Warenkorb { 
    String kunde; 
    Artikel artikelliste[]; 
    int sessionid; 

    Random s = new Random(); 

    Warenkorb(String kunde, Artikel[] artikel){ 
     this.kunde = kunde; 
     this.artikelliste = artikel; 
     this.sessionid = s.nextInt(); 
     public double gesamtpreis(){ 
      double summe = 0; 
      for(Artikel preis : artikel){ 
       summe += artikel.getVerkaufspreis(); 
      } 
      return summe; 
     } 
    } 

} 

Répondre

2

Vous essayez de créer une méthode supplémentaire dans le constructeur. Ce n'est pas une bonne idée. Vous essayez également d'indexer un tableau par un objet, ce qui ne fonctionnera pas. Enfin, vous essayez d'appeler getVerkaufspreis() sur un Object, au lieu d'un Artikel fortement typé. Essayez ceci:

Warenkorb(String kunde, Artikel[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
    double summe = 0; 
    for (Artikel preis : artikel) { 
     summe += preis.getVerkaufspreis(); 
    } 
} 

maintenant à la fin de la boucle, vous aurez la somme - mais qu'est-ce que voulez-vous faire? Je suppose que vous voulez créer un champ pour elle ...

Si vous avez absolument d'utiliser un Object[] au lieu d'un Artikel[] alors vous devriez jeter à chaque itération:

Warenkorb(String kunde, Object[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
    double summe = 0; 
    for (Object preis : artikel) { 
     summe += ((Artikel)preis).getVerkaufspreis(); 
    } 
} 
1

Tout d'abord, vous devez avoir un tableau de Artikel, pas Object. Vous ne pouvez pas faire grand-chose avec Objects.

En supposant que vous changez artekelliste-Artikel[], la somme irait comme ceci:

for(Artikel preis : artikelliste){ 
    summe += artikel.getVerkaufspreis(); 
} 

Lorsque vous utilisez une Amélioré pour la boucle, il n'y a pas besoin d'indexation de tableau explicite.

De même, vous ne pouvez pas placer une méthode dans un constructeur. Vous devez tirer sur gesamtpreis() du constructeur, comme celui-ci:

Warenkorb(String kunde, Artikel[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
} 
public double gesamtpreis(){ 
    double summe = 0; 
    for(Artikel preis : artikelliste){ 
     summe += artikel.getVerkaufspreis(); 
    } 
    return summe; 
} 

Comme une note de côté, vous ne pouvez jamais utiliser un Object comme un index de tableau; l'équivalent boucle standard pour serait

for(int i = 0; i < artikelliste.length; i++) { 
    summe += artikelliste[i].getVerkaufspreis(); 
} 
0

En regardant votre code, vous utilisez un « pour » au lieu d'un « foreach » dans votre constructeur Warenkorb.

0

Déplacez la variable summe du constructeur et effectuez la boucle sans l'encapsuler dans une fonction. Ou, alternativement, déplacez toute la fonction gesamtpreis et appelez-la à partir du constructeur:

double summe; 

Warenkorb(String kunde, Object[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
    this.summe = gesamtpreis(); 
} 

public double gesamtpreis(){ 
    double _summe = 0; 
    for(Object preis : artikelliste){ 
      _summe += artikelliste[preis].getVerkaufspreis(); 
    } 
    return _summe; 
}