Question

J'ai deux classes, l'une pour les articles et un autre pour le panier. Le panier est constitué d'un ensemble-objet, qui contient des objets article.

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

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

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

}
Était-ce utile?

La solution

Vous essayez de créer une méthode supplémentaire dans le constructeur. Ce n'est pas une bonne idée. Vous êtes également essayer d'indexer un tableau par un objet, 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();
    }
}

d'ici 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 absolument Vous pour 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();
    }
}

Autres conseils

D'abord, vous devriez avoir un tableau de Artikel, non 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 boucle améliorée de car, il n'y a pas besoin d'indexation de tableau explicite.

En outre, vous ne pouvez pas mettre une méthode dans un constructeur. Vous devez tirer sur gesamtpreis() du constructeur, comme ceci:

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

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

Déplacer la variable summe sur le constructeur, et faire la boucle sans l'envelopper dans une fonction. Ou, alternativement, déplacer la gesamtpreis toute fonction et l'appeler 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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top