Pergunta

Eu tenho duas classes, uma para artigos e outro para o carrinho. O carrinho é constituído por um objecto-matriz, que contém objectos article.

Eu preciso resumir os preços dos artigos com um foreach loop dentro do construtor. Quando eu escrevo o método (que é provavelmente errado) dentro do construtor de seu tipo não é aceite como dupla. Como posso resumir campos de objetos dentro de um-matriz de objeto e como posso fazer isso dentro de um construtor. (<- esta parece ser uma decisão de design ruim, mas é parte do trabalho de classe maio)

Aqui estão as minhas 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;
        }
    }
}

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

}
Foi útil?

Solução

Você está tentando criar um extra método dentro do construtor. Isso não é uma boa idéia. Você também está tentando indexar uma matriz, um objeto, que não vai funcionar. Finalmente, você está tentando chamar getVerkaufspreis() em um Object, em vez de um Artikel fortemente tipado. Tente isto:

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

Agora, no final do loop você terá a soma - mas o que você quer fazer com ele? Eu suspeito que você deseja criar um campo para ele ...

Se você absolutamente Have para usar um Object[] em vez de um Artikel[] então você deve lançar em cada iteração:

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

Outras dicas

Em primeiro lugar, você deve ter uma série de Artikel, não Object. Você não pode fazer muito com Objects.

Assumindo que você mudar artekelliste para Artikel[], a soma seria assim:

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

Quando você usa um avançado-loop for, não há necessidade de indexação de matriz explícita.

Além disso, você não pode colocar um método dentro de um construtor. Você precisa gesamtpreis() puxar para fora do construtor, como este:

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

Como uma nota lateral, você nunca pode usar um Object como um índice da matriz; o padrão-loop for equivalente seria

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

Olhando para o código, você está usando um "para" em vez de um "foreach" em seu construtor Warenkorb.

Mover a variável summe fora do construtor, e fazer o loop sem envolvê-lo em uma função. Ou, alternativamente, se mover para fora toda a gesamtpreis função e chamá-lo a partir do construtor:

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top